Как перебрать многомерный массив с детьми
Так, у меня появилась небольшая трудность в переборе многомерных массивов. Не буду слишком сильно затягивать с объяснением. К сути!
Есть массив:
const array = [{
"name": "categories",
"values": [{
"id": "1",
"name": "Косметика",
"children": [{
"id": "27",
"name": "Парфюмерия",
"children": [{
"id": "84",
"name": "Арабские Духи",
}]
}]
}]
}];
Необходимо проверить существует ли ключ values в основном массиве. Если такой есть, то преобразовываем его содержимое.
А именно... проверяем на существование ключа children, и каждый раз когда встречается данный ключ, мы его записываем в другой массив, как новое значение с передаче его имени.
По итогу, у нас должен получится следующий массив:
const result = [{
1: [{
"name": "Косметика",
}],
27: [{
"name": "Парфюмерия",
}],
84: [{
"name": "Арабские Духи",
}],
}];
Заранее, благодарю за помощь :*
Ответы (2 шт):
Вот в этом похожем вопросе, давал отличный пример кода который можно легко адаптировать под свои надобности. извлечь из массива со вложенностью элемент
Решил задачу, вот пример кода:
const array = [{
"name": "categories",
"values": [{
"id": "1",
"name": "Косметика",
"children": [{
"id": "27",
"name": "Парфюмерия",
"children": [{
"id": "84",
"name": "Арабские Духи",
}]
}]
}]
}];
const config = [{
"categories": [{
"title": "categories",
"type": "array"
}]
}];
let tags = [];
function reduceAll(obj, val) {
if ((val.children instanceof Array) && val.children.length) {
val.children.reduce(reduceAll, obj);
}
obj.push(val);
return obj;
}
for (const i of Object.keys(array)) {
if (config.hasOwnProperty(array[i].name)) {
tags.push({
key: array[i].name,
title: config[array[i].name].title,
values: array[i].values.reduce(reduceAll, [])
});
}
}
console.log(tags);