需转化的数据:
[{id: 10122,name:'顶级节点',parentId: 0},{id: 10123,name:'子类',parentId: 10122},{id: 10123,name:'孙类',parentId: 10122}]
目标数据:
[{
id: 10122,name:'顶级节点',parentId: 0,
children:[id: 10123,name:'子类',parentId: 10122,children:[{id: 10123,name:'孙类',parentId: 10122}]]
}]
转换数据的思路:
1、把数据转换为键名 为id 的对象 "{id:{item}}"
2、把每个项 添加 子项 (children)
3、把顶级的元素 放到指定数组
实现代码:
from(list = [], props = {id: 'id', parentId: 'parentId'}) {
let map = {};
let tree = [];
list.forEach(item => {
map[item[props.id]] = item;
});
list.forEach(item => {
if (item[props.parentId] && map[item[props.parentId]]) {
if (!Array.isArray(map[item[props.parentId]]['children'])) {
map[item[props.parentId]]['children'] = [];
}
map[item[props.parentId]]['children'].push(map[item[props.id]]);
} else {
tree.push(map[item[props.id]]);
}
});
map = null;
return tree;
},