无限分类递归 多数用在树形结构数据. 有这样一组数据:
简单实现如下
const arr = [
{
id: 4,
name: '张三的儿子',
parentId: 1
},
{
id: 43,
name: '张三的2儿子',
parentId: 1
},
{
id: 5,
name: '李四的儿子',
parentId: 2
},
{
id: 6,
name: '张三的儿子的儿子',
parentId: 4
},
{
id: 1,
name: '张三',
parentId: 0
},
{
id: 2,
name: '李四',
parentId: 0
},
{
id: 3,
name: '王五',
parentId: 0
},
];
原本我的答案是递归,但是我一个激灵把他拍成了一次遍历
以下是我的答案,我实际上是利用对象的引用, 利用对象的引用改变指向的arr的数据. 就得到想要的结构
function cost(arr) {
const sortArr = (a,b) => {
if ( !obj[a.id] ) {
obj[a.id] = a
obj[a.id].children = []
}
if ( !obj[b.id] ) {
obj[b.id] = b
obj[b.id].children = []
}
return b.parentId - a.parentId
}
let obj = {
0: {
id: 0,
name: 'root',
children: [],
}
}
return (arr.sort(sortArr).forEach(i=>obj[i.parentId].children.push(i)), obj[Object.keys(obj)[0]])
}
ps:遇到问题,先不要急着写代码,先想好思路,这样会很大程度避免弯路。
不管你是初级还是高级,只要你喜欢讨论技术,我都欢迎加QQ群讨论~
QQ群:615766495
Q群链接:前端FeNext