как оптимизировать массив с объектами 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);

→ Ссылка