Я хотел бы преобразовать массив объектов во вложенный объект, используя рекурсивную функцию.
Цель состоит в том, чтобы создать функцию, которая работает независимо от глубины моего начального массива. Ниже вы можете увидеть исходные данные с желаемым результатом + фрагмент кода с попыткой решить эту проблему.
Начальный массив объектов
configurator: [
{
key: '-LLnLuLt6cn-vBpMWv-u',
name: 'CONFIGURATOR_1',
collections: [
{
key: '-LLnMWy69vACjys0QIGH',
name: 'COLLECTION_1',
options: [
{
key: '-LLnOxg5hsDYR-PcfjBT',
name: 'OPTION_1',
},
{
key: '-LLnP-O6TyHxIpPk9bCU',
name: 'OPTION_2',
},
],
},
{
key: '-LLnMYNyJmhSCPB-8lL1',
name: 'COLLECTION_2',
},
],
},
{ key: '-LLnLtLs7PjXSAW0PWCQ',
name: 'CONFIGURATOR_2',
}]
Желаемый результат: вложенные объекты
configurator: {
'-LLnLuLt6cn-vBpMWv-u': {
name: 'CONFIGURATOR_1',
index: 0,
collections: {
'-LLnMWy69vACjys0QIGH': {
name: 'COLLECTION_1',
index: 0,
options: {
'-LLnOxg5hsDYR-PcfjBT': {
name: 'OPTION_1',
index: 0,
},
'-LLnP-O6TyHxIpPk9bCU': {
name: 'OPTION_2',
index: 1,
},
},
},
'-LLnMYNyJmhSCPB-8lL1': {
name: 'COLLECTION_2',
index: 1,
},
},
},
'-LLnLtLs7PjXSAW0PWCQ': {
name: 'CONFIGURATOR_2',
index: 1,
},
}
Моя попытка
Вот фрагмент кода того, что я пробовал до сих пор. Работает только с первой глубиной массива. Я считаю, что это проблема, которую нужно решить: как динамически добавить / «толкнуть» объект к вложенному объекту?
Надеюсь, кто-нибудь может помочь. Ура, Жюльен.
const data = {
configurator: [{
key: '-LLnLuLt6cn-vBpMWv-u',
name: 'CONFIGURATOR_1',
collections: [{
key: '-LLnMWy69vACjys0QIGH',
name: 'COLLECTION_1',
options: [{
key: '-LLnOxg5hsDYR-PcfjBT',
name: 'OPTION_1',
},
{
key: '-LLnP-O6TyHxIpPk9bCU',
name: 'OPTION_2',
},
],
},
{
key: '-LLnMYNyJmhSCPB-8lL1',
name: 'COLLECTION_2',
},
],
},
{
key: '-LLnLtLs7PjXSAW0PWCQ',
name: 'CONFIGURATOR_2',
}
]
};
const format = (object) => {
const result = {};
Object.keys(object).forEach((property) => {
if (Array.isArray(object[property])) {
object[property].forEach((test, index) => {
const {
key,
...content
} = test;
result[key] = {
index,
...content
};
format(content);
});
}
});
return result;
};
const formated = format(data);
console.log('@FORMATED__', formated);