Рекурсивный проход по массиву на JavaScript
const data = {
group: "Group1",
attributes: { name: "Item1" },
children: [
{ attributes: { name: "SubItem1" } },
{ attributes: { name: "SubItem2" } },
{
group: "Group2",
attributes: { name: "Item2" },
children: [{ attributes: { name: "SubItem3" } }, { attributes: { name: "SubItem4" } }],
},
],
};
результат
{
Group1: [Item1,SubItem1,SubItem2, Item2,SubItem3,SubItem4],
Group2: [Item2,SubItem3,SubItem4]
}
Порядок в массиве не имеет значение.
Ответы (1 шт):
Автор решения: ksa
→ Ссылка
не понимаю как написать рекурсию на чистом js
Предложу такой вариант...
const data = {
group: "Group1",
attributes: { name: "Item1" },
children: [
{ attributes: { name: "SubItem1" } },
{ attributes: { name: "SubItem2" } },
{
group: "Group2",
attributes: { name: "Item2" },
children: [
{ attributes: { name: "SubItem3" } },
{ attributes: { name: "SubItem4" } }
],
},
],
};
const group = test()
console.log(group(data))
//
function test() {
const res = {}
const arr = []
return function loop(obj) {
arr.push(obj.group)
add(obj)
obj.children.forEach(o => 'group' in o ? loop(o) : add(o))
arr.pop()
return res
}
//
function add(obj) {
arr.forEach(g => {
res[g] ??= []
res[g].push(obj.attributes.name)
})
}
}