【发布时间】:2019-04-22 17:54:12
【问题描述】:
考虑以下深度嵌套的数组:
const array = [
{
id: 1,
name: "bla",
children: [
{
id: 23,
name: "bla",
children: [{ id: 88, name: "bla" }, { id: 99, name: "bla" }]
},
{ id: 43, name: "bla" },
{
id: 45,
name: "bla",
children: [{ id: 43, name: "bla" }, { id: 46, name: "bla" }]
}
]
},
{
id: 12,
name: "bla",
children: [
{
id: 232,
name: "bla",
children: [{ id: 848, name: "bla" }, { id: 959, name: "bla" }]
},
{ id: 433, name: "bla" },
{
id: 445,
name: "bla",
children: [
{ id: 443, name: "bla" },
{
id: 456,
name: "bla",
children: [
{
id: 97,
name: "bla"
},
{
id: 56,
name: "bla"
}
]
}
]
}
]
},
{
id: 15,
name: "bla",
children: [
{
id: 263,
name: "bla",
children: [{ id: 868, name: "bla" }, { id: 979, name: "bla" }]
},
{ id: 483, name: "bla" },
{
id: 445,
name: "bla",
children: [{ id: 423, name: "bla" }, { id: 436, name: "bla" }]
}
]
}
];
我如何使用递归来通过键抓取某个可能深度嵌套的对象?
我试过这个,但这不适用于嵌套超过 2 层,然后它只会返回 undefined:
const findItemNested = (arr, itemId, nestingKey) => {
for (const i of arr) {
console.log(i.id);
if (i.id === itemId) {
return i;
}
if (i[nestingKey]) {
findItemNested(i[nestingKey], itemId, nestingKey);
}
}
};
结果应该是:
const res = findItemNested(array, 959, "children"); >> { id: 959, name: "bla" }
这也许也可以使用.find 来实现,或者只是为了展平数组(通过 children 键),但使用递归对我来说似乎是最合乎逻辑的解决方案。有没有人可以解决这个问题?
提前致谢:)。
【问题讨论】:
-
你需要
return内部的findItemNested调用,否则它的返回值被丢弃。 -
是的,这是我一直做错的一件事,谢谢!
标签: javascript recursion nested