常用的工具方法
1. once
javascript
function once(fn) {
let done = false;
return function (...args) {
if (!done) {
done = true;
fn.call(this, ...args)
}
}
}
2. sleep
javascript
const sleep = (t = 0) => new Promise(resolve => setTimeout(resolve, t))
3. Tree结构
javascript
let arr = [
{ id: 2, name: '2', pid: 1 },
{ id: 3, name: '3', pid: 1 },
{ id: 4, name: '4', pid: 3 },
{ id: 5, name: '5', pid: 3 },
{ id: 1, name: '1', pid: 0 },
]
function arrToTree (arr) {
let map = new Map(), result = [];
arr.forEach(item => map.set(item.id, item))
arr.forEach(item => {
let parent = map.get(item.pid);
if (parent) {
if (!parent.children) {
parent.children = []
}
parent.children.push(item)
} else {
result.push(item)
}
})
return result;
}
console.log(arrToTree(arr));
4. 简单的模板渲染
javascript
function render (template, data) {
// \s对空格进行匹配,前后空格都可有N个或没有
const reg = /\{\{\s*(\w+)\s*\}\}/g;
return template.replace(reg, (sign, key) => {
// sign:匹配到正则值,如{{name}}
// key:匹配到的值,如name
return data[key]
})
}
let template = '我是{{name}},年龄{{age}},性别{{ sex}},身高{{height}}';
let person = {
name: '小朋',
age: 24,
sex: '男'
}
console.log(render(template, person));
5. 对象合并
6. 柯里化
javascript
const currying = (fn, ...args) => {
if (args.length >= fn.length) {
return fn.call(fn, ...args);
}
return (...rest) => currying(fn, ...args, ...rest);
}