Как перебрать многомерный массив с детьми

Так, у меня появилась небольшая трудность в переборе многомерных массивов. Не буду слишком сильно затягивать с объяснением. К сути!

Есть массив:

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 шт):

Автор решения: Eugene X

Вот в этом похожем вопросе, давал отличный пример кода который можно легко адаптировать под свои надобности. извлечь из массива со вложенностью элемент

→ Ссылка
Автор решения: FormWeb

Решил задачу, вот пример кода:

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);
→ Ссылка