我想检索特定组的所有子 ID,可以嵌套或不嵌套。
这是一个示例 json:
[
{
id: 1,
name: 'Desjardins Group 1',
children: [
{ id: 2, name: 'Analysts', children: [] },
{ id: 3, name: 'Administration', children: [] }
]
},
{
id: 4,
name: 'Desjardins Group 2',
children: [
{ id: 5, name: 'Consultants1', children: [] },
{
id: 6,
name: 'Consultant2',
children: [
{
id: 7, name: 'Interns', children: [
{ id: 8, name: 'subInterns1', children: [] },
{ id: 9, name: 'subInterns2', children: [] },
{ id: 10, name: 'subInterns3', children: [] }
]
}
]
}
]
}
]
我正在尝试制作一个带有 id 参数的函数,并返回所有子 ID。例如:getChildGroups(6) 将返回 7、8、9 和 10。
我想递归函数和过滤器是要走的路,但我找不到合适的例子。
这是约翰鲍尔答案的简化版本。
第一个函数只查找与给定 ID 匹配的第一个节点,不需要任何数据积累:
function findNode(data, id) {
if (!Array.isArray(data)) return;
for (let entry of data) {
if (entry.id === id) {
return entry;
} else {
const node = findNode(entry.children, id);
if (node) {
return node;
}
}
}
}
第二个函数只获取子 ID,将它们存储在传递的数组中,而不创建任何中间数组:
function getChildIds(node, result = []) {
if (!node) return;
if (!Array.isArray(node.children)) return;
for (let entry of node.children) {
result.push(entry.id);
getChildIds(entry, result);
}
return result;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句