Объединение объектов в массиве по общим ключам и значениям - PullRequest
0 голосов
/ 26 мая 2019

У меня есть набор данных, массив объектов, которые мне нужно объединить по общему ключу (Дата), а затем объединить имя пользователя в качестве ключа для UserScore. Я планирую отобразить эти данные с помощью d3 и найти решение с использованием некоторых методов d3, но хотел бы написать их с помощью vanilla JS. Вот образец необработанных данных

[
  {
    "Date": "2019-05-02 00:00:00 UTC",
    "UserName": "user1",
    "UserScore": "39"
  },
  {
    "Date": "2019-05-02 00:00:00 UTC",
    "UserName": "user2",
    "UserScore": "11"
  },
  {
    "Date": "2019-05-02 00:00:00 UTC",
    "UserName": "user3",
    "UserScore": "4"
  },
  {
    "Date": "2019-05-02 01:01:01 UTC",
    "UserName": "user1",
    "UserScore": "57"
  },
  {
    "Date": "2019-05-02 01:01:01 UTC",
    "UserName": "user2",
    "UserScore": "1"
  },
  {
    "Date": "2019-05-02 01:01:01 UTC",
    "UserName": "user3",
    "UserScore": "42"
  }
]

Вот мой желаемый вывод

   {
    "Date": "2019-05-02 00:00:00 UTC",
    "user1": "39",
    "user2": "11",
    "user3": "4"
   },
   {
    "Date": "2019-05-02 01:01:01 UTC",
    "user1": "57",
    "user2": "1",
    "user3": "42"
   }
]

1 Ответ

0 голосов
/ 26 мая 2019

Вы можете использовать reduce() для их группировки.

const arr = [ { "Date": "2019-05-02 00:00:00 UTC", "UserName": "user1", "UserScore": "39" }, { "Date": "2019-05-02 00:00:00 UTC", "UserName": "user2", "UserScore": "11" }, { "Date": "2019-05-02 00:00:00 UTC", "UserName": "user3", "UserScore": "4" }, { "Date": "2019-05-02 01:01:01 UTC", "UserName": "user1", "UserScore": "57" }, { "Date": "2019-05-02 01:01:01 UTC", "UserName": "user2", "UserScore": "1" }, { "Date": "2019-05-02 01:01:01 UTC", "UserName": "user3", "UserScore": "42" } ]

const res = arr.reduce((ac,{Date,UserName,UserScore}) => {
  ac[Date] = ac[Date] || {Date};
  ac[Date][UserName] = UserScore;
  return ac;
},{})

console.log(Object.values(res))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...