递归拼接树形结构【JS小知识】
我叫十七_:
rootList.reduce((init, nextVal) => {
if (!nextVal.parent) {
'children' in nextVal ? '' : (nextVal.children = 【】);
init.push(nextVal);
} else {
init.find(item => item.id === nextVal.parent)
【'children'】.push(nextVal);
}
return init;
}, 【】);
[OK]
佐杜的沙丘:
// 输入
[
{ id: '1'},{id: '1-1'},{id: '1-2' },{id: '1-3'},{id: '1-2-1'},{id: '1-2-1-1' },
{ id: '3-1' },{ id: '4-2-1' }, { id: '2' }, { id: '2-1' }, { id: '2-2-1' }
]
// 输出
{
'1': {
'1-1': {},
'1-2': {
'1-2-1': {
'1-2-1-1': {}
}
}
},
'2': {
'2-1': {},
'2-2': {
'2-2-1': {}
}
},
'3': {
'3-1':{}
},
'4': {
'4-2': {
'4-2-1': {}
}
}
}
大佬求解这道题怎么做?
小伍先生啊:
老师讲得很好,一路看看老师视频过来的,看了老师的自己又写了另外一种,感谢老师,支持老师
var arr = rootList.reduce((init, nextVal) => {
if (nextVal.parent == null) {
nextVal.children = 【】
init.push(nextVal);
} else {
for (item of init) {
let itemid = nextVal.id.toString().slice(0, 1)
if (item.id == parseInt(itemid)) {
item.children.push(nextVal)
}
}
}
return init
}, 【】);
bili_44392586626:
遍历list的时候,直接调用递归函数,不用返回值接收,看着难受😣,直接i.children=getTreeList(arr,i.id,【】)
布雷诺ttt:
这是二层的树,如果是三层以上树,程序应该怎么优化?
密码菌不是密码君:
次级父节点如果只有一个就遍历不出来了[委屈]
叔叔可以的:
老师请问个问题 for(var) 和 for(let) 变量提升的问题能不能开个视频呢?
暖男不偷猪:
我的一个项目就是这样做的,但是有三层,不用递归好难受啊
小旭x:
如果要加搜索框 搜索对应的节点要怎么做呢
秋雨雨蝴蝶:
问一下,怎么将树形结构生成评级结构!目前真的需要!
黎夜:
有时候后端数据返回的根节点不是统一的。。有的是null 有的是-1,反正就是找不到pid的都是根节点了,这时候这样递归没法实现,用map来做了。