获取Node JS中的第一级、第二级和第三级子节点



我在UI侧和对象列表中有一个下拉菜单。在这个列表中有很多子对象我需要过滤所有的子对象。请检查下面的对象。我正在尝试做Node JS.

[
{
name : "This is horse",
id:1
parentId : null
},
{
name : "horse child",
id:2
parentId : 1
},
{
name : "horse child child",
id:3
parentId : 2
},
{
name : "QQQQQ",
id:4
parentId : 1
},
{
name : "WWWWWWWWWW",
id:5
parentId : 3
},
{
name : "WWWWWWWWWW",
id:6
parentId : null
}
]

如果我选择级别0,那么我得到id: 1,6
如果我选择级别1,那么我得到id: 1,2,4,6
如果我选择级别2,那么我得到id: 1,2,3,4,5,6

您应该对数据进行一些预处理,以便每个对象将获得level属性。一旦你有了这个,用

进行过滤就是小菜一碟。
result = data.filter(o => o.level <= givenLevel);

使用树构建算法用level填充您的数据。此代码还将为每个节点添加children属性。也许这是有用的:

function addLevels(data) {
let map = new Map(data.map(o => [o.id, Object.assign(o, {children: []})])).set(null, {children: []});
for (let o of data) map.get(o.parentId).children.push(o.id);
(function dfs(id=null, level=-1) {
const node = map.get(id);
node.level = level;
for (let child of node.children) dfs(child, level + 1);
})();
}
// Example data
const data = [{ name : "This is horse", id:1, parentId : null }, { name : "horse child", id:2, parentId : 1 }, { name : "horse child child", id:3, parentId : 2 }, { name : "QQQQQ", id:4, parentId : 1 }, { name : "WWWWWWWWWW", id:5, parentId : 3 }, { name : "WWWWWWWWWW", id:6, parentId : null } ];
addLevels(data);
console.log(data);

您只需执行一次(或每次数据更改时),而不是每次想要按级别过滤数据时。

最新更新