1. 优化arr2tree
This commit is contained in:
ruanlinxin 2021-05-31 22:04:11 +08:00
parent f8fa44c94c
commit 12b7f0ce0e

View File

@ -55,18 +55,25 @@ export default {
args.splice(0, 2); args.splice(0, 2);
return this.get(filter).map(instance => instance[method](...args)); return this.get(filter).map(instance => instance[method](...args));
}, },
arr2tree(arr, pid, id, children, topParentId){ arr2tree(arr=[], pid='pid', id='id', children='children', topParentId=0){
arr.forEach(item => { const datas = {} // 数据缓存
if(item[pid] != topParentId){ return safety(arr).filter(item =>{
let parent = arr.find(i => i[id] === item[pid]) const _id = item[id] // 提取自身id 必须唯一
if(parent){ const _pid = item[pid] // 提取父级id
if(!parent[children]){ const self = datas[_id] // 读取数据缓存中的数据
parent[children] = []; let parent = datas[_pid] // 读取父级数据
if(self){ // 如果缓存中有数据
item[children] = self[children] // 把缓存的数据保存到自身
} }
parent[children].push(item) datas[_id] = item // 替换缓存中的数据
if(!parent){ // 如果没有找到父级数据
parent = { // 创建一个全新的父级数据
[children]:[]
} }
datas[_pid] = parent // 记录到缓存
} }
parent.push(item) // 推送自身到父级
return id == topParentId // 这里用 == 防止出现 字符串不等于数字类型的情况
}) })
return arr.filter(i => i[pid] == topParentId)
} }
} }