根据 parentId 对对象数组进行重构
题目:
const nodeList = [{ id: '3', parentId: '1' }, { id: '1', parentId: '' }, { id: '2', parentId: '4' }]
根据 parentId 和 id 相匹配,重构对象数组得到:
const re = [{
id: '1',
parentId: '',
children: [{
id: '3',
parentId: '1'
}]
}, {
id: '2',
parentId: '4'
}]
使用一个数组和一个对象、三个 for 循环
function transformToTree(nodeList) {
var arr = [];
var object = {};
for (let key of nodeList) {
object[key.id] = {
id: key.id,
parentId: key.parentId,
children: []
}
} // 将每一项都添加进对象中,并创建空的 children 属性
for (let item of nodeList) {
if (object[item.parentId]) object[item.parentId]["children"].push(item);
} //如果存在 id 和这个 parentId 对应,就找到了自己的父节点,就将这个 item 添加进对应对象的 children 数组中去
for (let result of nodeList) {
if (!object[result.parentId]) {
arr.push(object[result.id]);
}
} //在上一个 for 循环中已经将每一个父节点对应的孩子添加完毕,这个 for 循环判断每一项 parentId 和 object 中的 id 相对应,没有的话直接添加进 arr 数组
console.log(arr);
}