@megavesta

Как объединить массив с повторяющимися объектами?

Добрый день! Есть подобный массив:
const array = [
    {name: 'SomeName', value: 0},
    {name: 'SomeName', value: 3},
    {name: 'SomeName', value: 1},
    {name: 'SecondName', value: true},
    {name: 'ThirdName', value: '2022-09-01T00:00:00.000+03:00'}
];


Подскажите, как сделать, чтобы объекты с одинаковым name объединялись, а их value попадали в объект, чтобы на выходе получалось такое:
const newArray = {
    SomeName: [0,3,1],
    SecondName: true,
    ThirdName: true
};
  • Вопрос задан
  • 137 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Если тупо получать то, что указано в тексте вопроса, тогда

const result = Object
  .entries(arr.reduce((acc, n) => ((acc[n.name] ??= []).push(n.value), acc), {}))
  .reduce((acc, [ k, v ]) => (acc[k] = v.length === 1 || v, acc), {});

Но почему

ThirdName: true

??

В самом деле так и надо, или всё-таки там должна быть строка с датой из исходного массива? А что если значения повторяются? Вот вариант с получением только уникальных значений и без дурацкого true там, где значение одно:

const result = Object
  .entries(arr.reduce((acc, n) => ((acc[n.name] ??= new Set).add(n.value), acc), {}))
  .reduce((acc, [ k, [...v] ]) => (acc[k] = ~-v.length ? v : v[0], acc), {});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
21 нояб. 2024, в 19:31
500 руб./за проект
21 нояб. 2024, в 19:28
200000 руб./за проект