как оптимизировать массив с объектами JS?
нужно объединить два одинаковых свойства, как из такого массива
allow = [
{ path2: ['TEST1'] },
{ path2: ['TEST2' ] },
{ path1: ['TEST3' ] }
]
получить такой
allow = [
{ path2: ['TEST1','TEST2'] },
{ path1: ['TEST3'] }
]
то есть удалить повторяющиеся ключи и объединить их свойства
Ответы (1 шт):
Автор решения: vsemozhebuty
→ Ссылка
Можно преобразовывать в два прохода. На первом этапе собрать временный объект, в котором ключами будут все ключи вложенных объектов, а значениями — массивы из значений соответствующих ключей. На втором этапе мы каждую пару ключ/значение превращаем в объект внутри массива.
Это можно сделать, например, так (но это не универсальный вариант — он подходит только под формат из вашего примера, то есть для объктов только с одной парой ключ/значение и с одним элементом массива в значении):
const array = [
{ path2: ['TEST1'] },
{ path2: ['TEST2' ] },
{ path1: ['TEST3' ] }
];
const temp = array.reduce(
(acc, element) => {
const [[key, value]] = Object.entries(element);
if (!acc[key]) acc[key] = [];
acc[key].push(value[0]);
return acc;
},
{},
);
console.log(temp);
const optimized = Object.entries(temp).map(
([key, value]) => ({ [key]: value })
);
console.log(optimized);