Рассмотрим следующий глубоко вложенный массив:
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
, или просто для выравнивания массива (с помощью дочернего ключа), но использование рекурсии кажется мне наиболее логичным решением.У кого-нибудь есть решение этой проблемы?
Заранее спасибо:).