数组数据
const list = [
{
id: '1',
name: 'qqq',
sex: 0,
parentId: 'root',
},
{
id: '2',
name: 'www',
sex: 0,
parentId: 'root',
},
{
id: '3',
name: 'eee',
sex: 0,
parentId: 'root',
},
{
id: '1-1',
name: 'rrr',
sex: 0,
parentId: '1',
},
{
id: '1-2',
name: 'ttt',
sex: 0,
parentId: '1',
},
{
id: '2-1',
name: 'yyy',
sex: 0,
parentId: '2',
},
{
id: '3-1',
name: 'uuu',
sex: 0,
parentId: '3',
},
];
使用递归遍历 消耗性能
function listToTree(arr, parentId) {
return arr
.filter((item) => item.parentId === parentId)
.map((item) => {
return {
...item,
children: listToTree(list, item.id),
};
});
}
listToTree(list,'root')
利用对象存储键名
function listToTree(arr) {
const map = {};
const result = [];
list.forEach((item) => {
item.children = [];
map[item.id] = { ...item };
if (map[item.parentId]) {
map[item.parentId].children.push(item);
} else {
result.push(item);
}
});
return result;
}