машинопись: группировка в многомерный массив объектов (по id) - PullRequest
0 голосов
/ 17 февраля 2019

Мне нужна помощь в реализации следующего определения функции:

Я не знаю, как обращаться с многомерными массивами как таковыми

вход (сгруппированный подата)

[
  {date: 1552489200000, data: [{id: 1, value:100}, {id: 2, value: 101}]},
  {date: 1552575600000, data: [{id: 1, value:102}, {id: 2, value: 103}]},
  {date: 1552662000000, data: [{id: 1, value:104}]},
]

вывод (сгруппированы по идентификатору)

[
  {id:1, data: [{date: 1552489200000, value: 100}, {date: 1552575600000, value: 102}, {date: 1552662000000, value: 104}]},
  {id:2, data: [{date: 1552489200000, value: 101}, {date: 1552575600000, value: 103}]},
]

const changeDataOrg = (
  groupByDate: { date: number; data: { id: number; value: number }[] }[],
): { id: number; data: { date: number; value: number }[] }[] => {
  const groupById = [];
  return groupById;
};

1 Ответ

0 голосов
/ 17 февраля 2019

Вы можете использовать уменьшить и forEach

Мы создаем ключ на основе id и kepp, нажимая значениясоответственно в. если ключ уже существует, то мы помещаем новую запись в массив данных конкретного ключа, если нет, то мы добавляем новый ключ со значением.В конце вынимаем значения из выходного объекта.

let data = [{date: 1552489200000, data: [{id: 1, value:100}, {id: 2, value: 101}]},{date: 1552575600000, data: [{id: 1, value:102}, {id: 2, value: 103}]},{date: 1552662000000, data: [{id: 1, value:104}]},]

let output = data.reduce((out,{date, data})=>{
  data.forEach(({id, value }) => {
    let data = {date,value}
    out[id] ? out[id].data.push(data) : out[id]={id,data:[data]}
  })
  return out
},{})

console.log(Object.values(output))
...