Преобразовать атрибут объекта в массив объекта - PullRequest
0 голосов
/ 05 апреля 2020

Я хочу объединить массив ObjectA, содержащий атрибут ObjectB, по атрибуту ObjectA.

Например:

let myArray = [
  { name: 'Jeu', series: { name: 'testA', value: '89' } },
  { name: 'Dim', series: { name: 'testB', value: '490' } },
  { name: 'Dim', series: { name: 'testC', value: '978' } }
]

И я хотел бы преобразовать его в

[
  { name: 'Jeu', series: { name: 'testA', value: '89' } },
  { name: 'Dim', series: [{ name: 'testB', value: '490' },{ name: 'testC', value: '978' } ] }
]

Могу ли я сделать это с помощью простого уменьшения / отображения l oop?

1 Ответ

1 голос
/ 05 апреля 2020

Вы можете сначала использовать reduce (с некоторым расширенным синтаксисом ), чтобы создать объект, который отображает уникальные имена и объекты в нужном формате, группируя серии по имени , Затем вы можете просто получить значения из этого объекта.

const myArray = [
  { name: 'Jeu', series: { name: 'testA', value: '89' } },
  { name: 'Dim', series: { name: 'testB', value: '490' } },
  { name: 'Dim', series: { name: 'testC', value: '978' } }
];

const map = myArray.reduce(
  (acc, curr) => ({
    ...acc,
    [curr.name]: {
      name: curr.name,
      series: acc[curr.name]
        ? [...acc[curr.name].series, curr.series]
        : [curr.series]
    }
  }),
  {}
);

const output = Object.values(map);
console.log(output);
...