【发布时间】:2019-07-25 05:35:09
【问题描述】:
对于这种结构的对象:
const myObj = {
id: 1,
name: '1',
children: [
{
id: 2,
name: '2',
children: [
{
id: 3,
name: '3',
children: []
}
]
},
{
id: 4,
name: '4',
children: [
{
id: 5,
name: '5',
children: [
{
id: 6,
name: '6',
children: [
{
id: 7,
name: '7',
children: []
}
]
}
]
}
]
},
]
}
如何通过值 (id) 获取对象?所以我正在寻找一个函数,如果我称之为:
findObj(myObj, 6);
它会返回这个:
{
id: 6,
name: '6',
children: [
{
id: 7,
name: '7',
children: []
}
]
}
另一个例子:
findObj(myObj, 3);
会返回这个:
{
id: 3,
name: '3',
children: []
}
我知道我需要一个递归函数。这是我到目前为止所拥有的:
findObj(obj, id) {
if (obj.id === id) {
return obj;
}
obj.forEach(x => {
if (x.id === id) {
return x;
} else {
this.findObj(x.children, id);
}
});
}
(这是一个角度类)
【问题讨论】:
-
搜索父项具有误导性,因为您搜索的是项目本身。顺便说一句,你试过什么?
-
是的,我刚刚编辑了我的答案哈哈@NinaScholz
-
如果您从回调函数中
return,请考虑它在父函数中的含义。然后考虑Array#forEach做了什么。 -
我在this Q&A 中实现了一个通用的
deepFind解决方案。我想你会发现它很有用:D
标签: javascript recursion