Как объединить или объединить данные по значению ключа в массиве объекта? - PullRequest
1 голос
/ 07 мая 2019

Я пытаюсь отсортировать массив и объединить данные с одним и тем же значением "date" вместе в массив.

До сих пор я пробовал метод .map / .foreach для обходапеременную даты и группировать все остальные свойства как объект, но я запутался в том, как объединить данные с одним и тем же ключом данных.

Данные, над которыми я работаю:

let rawdata = [ { 'date': 'a', 'time': 'b', 'value1': 123, 'value2': 234 },
  { 'date': 'a', 'time': 'c', 'value1': 127, 'value2': 294 },
  { 'date': 'b', 'time': 'c', 'value1': 127, 'value2': 294 }]

Моя цель:

target = [ { 'date': 'a', 
             'data': [{ 'time': 'b', 'value1': 123, 'value2': 234 }, 
                      { 'time': 'c', 'value1': 127, 'value2': 294 }] },
           { 'date': 'b', 
               data: [{ 'time': 'c', 'value1': 127, 'value2': 294 }] }]

Что я сделал:

let data1 = rawdata.map(item => {
  return {
    date: item.date,
    data: [
      { time: item.time,
        value1: item.value1,
        value2: item.value2
      }
    ]
  }
})

Как объединить данные1сортировка по ключу даты?

1 Ответ

1 голос
/ 07 мая 2019

Использование reduce:

let rawdata = [ { 'date': 'a', 'time': 'b', 'value1': 123, 'value2': 234 },{ 'date': 'a', 'time': 'c', 'value1': 127, 'value2': 294 },{ 'date': 'b', 'time': 'c', 'value1': 127, 'value2': 294 }];
let target = Object.values(rawdata.reduce((acc, { date, ...rest }) => {
  if (acc[date]) {
    acc[date].data.push({...rest});
  } else {
    acc[date] = { date, data: [{ ...rest }] };
  }
  return acc;
}, {}));
console.log(target);
.as-console-wrapper { max-height: 100% !important; top: auto; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...