有一个这样的数组,希望你将其转成树形结构:(我们默认没有parentId节点的就是根节点)
let arr = [
{
id: 3,
name: 'aaa',
parentId: 1
},
{
id: 2,
name: 'bbb',
parentId: 2
},
{
id: 4,
name: 'ccc',
parentId: 1
},
{
id: 5,
name: 'ddd',
parentId: 4
},
{
id: 6,
name: 'eee',
parentId: 4
},
{
id: 7,
name: 'fff',
parentId: 6
},
{
id: 8,
name: 'ggg',
parentId: 3
},
{
id: 9,
name: 'hhh',
parentId: 5
},
{
id: 10,
name: 'jjj',
parentId: 6
}
];
思路:当前节点的parentId和当前id一致的为一组
(1)首先遍历一遍,把当前item的id作为obj的键名,item的值作为obj的键值
(2)再遍历一遍,
如果当前的parentId不存在,它就是根节点,直接放进res数组里。
如果存在,判断有没有children属性,没有就赋值,并把当前项push到res数组里
function toTree(data) {
let res = [];
let obj = {};
data.forEach(item => {
// 把当前item的id作为obj的键名,item的值作为obj的键值
obj[item.id] = item;
});
data.forEach(item => {
let parent = obj[item.parentId];
if (parent) {
(parent.children || (parent.children = [])).push(item);
} else {
res.push(item);
}
});
return res;
}
console.log(toTree(arr));