我使用下面来循环出数据后将近有23
秒时间,有没有更好的方法来优化下感谢各位大佬
export async function getOrgTree(treeArray){
let r = [];
let tmpMap ={};
for(let i = 0, len = treeArray.length; i < len; i++){
tmpMap[treeArray[i]['code']]= treeArray[i];
}
for(let i = 0, len = treeArray.length; i < len; i++){
let key = tmpMap[treeArray[i]['parentCode']];
if (key) {
if (!key['children']) {
key['children'] = [];
key['children'].push(treeArray[i]);
} else {
if (key['children'].findIndex(v => v.code === treeArray[i].code) === -1) {
key['children'].push(treeArray[i]);
}
}
if(!treeArray[i]['parentCode']||treeArray[i]['parentCode']==='0'||treeArray[i]['parentCode']==='root'){
r.push(treeArray[i]);
}
} else if (!treeArray[i]['parentCode']||treeArray[i]['parentCode']==='0'||treeArray[i]['parentCode']==='root'){
r.push(treeArray[i]);
}
}
return r;
}
找到为什么这么久的原因了
由于这一句是要循环
key['children']
里面每个元素,而我们本不需要来循环每个元素,所以改为整个修改:
循环方式也是有性能的,
for...of
就要比for ... i++
要慢,亲测这么2万多数据,慢了1秒
。