Объедините объекты из массива с той же датой в новый массив объектов, используя Javascript - PullRequest
0 голосов
/ 19 октября 2018

У меня есть массив объектов, который выглядит следующим образом:

var data = [
{Date: "01-01-2000", Banana: 10},
{Date: "01-01-2000", Apple: 15},
{Date: "01-01-2000", Orange: 20},
{Date: "01-02-2000", Banana: 25},
{Date: "01-02-2000", Apple: 30},
{Date: "01-02-2000", Orange: 35}];

И я хотел бы знать, как объединить объекты в этом массиве с одинаковыми значениями даты, чтобы получить следующий массив:

data = [
{Date: "01-01-2000", Banana: 10, Apple: 15, Orange: 20},
{Date: "01-02-2000", Banana: 25, Apple: 30, Orange: 35}];

Приношу свои извинения, если это повторяющийся вопрос, я просто не смог найти пример, где пары ключ / значение различны в каждом объекте, и поэтому я подумал, что, по крайней мере, задам вопрос.

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Кроме того, вы можете использовать цикл for.

Попробуйте:

var data = [{Date: "01-01-2000", Banana: 10},{Date: "01-01-2000", Apple: 15},{Date: "01-01-2000", Orange: 20},{Date: "01-02-2000", Banana: 25},{Date: "01-02-2000", Apple: 30},{Date: "01-02-2000", Orange: 35}];
var obj = {};
for(var i = 0; i < data.length; i++){
   var date = data[i].Date;
   // Get previous date saved inside the result
   var p_date = obj[date] || {}; 
   // Merge the previous date with the next date
   obj[date] = Object.assign(p_date, data[i]);
}

// Convert to an array
var result = Object.values(obj);

console.log(result);
0 голосов
/ 19 октября 2018

Альтернативой является использование функции reduce для группировки объектов вместе с функцией Object.values для извлечения сгруппированных объектов.

var data = [{Date: "01-01-2000", Banana: 10},{Date: "01-01-2000", Apple: 15},{Date: "01-01-2000", Orange: 20},{Date: "01-02-2000", Banana: 25},{Date: "01-02-2000", Apple: 30},{Date: "01-02-2000", Orange: 35}],
    result = Object.values(data.reduce((a, c) => {
      a[c.Date] = Object.assign(a[c.Date] || {}, c);
      return a;
    }, {}));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...