Преобразование массива объектов javascript в пары массивов ключ-значение на основе свойств с использованием ES6 - PullRequest
0 голосов
/ 26 октября 2018

Допустим, у меня есть следующий массив объектов:

myArray = [
  {name: 'First', parent: 1, delta: 2},
  {name: 'Second', parent: 1, delta: 1},
  {name: 'Third', parent: 2, delta: 1}
];

Я хотел бы преобразовать этот массив в объект с ключами для родителя и значениями объектов.Например:

result = {
  1: [
       {name: 'First', parent: 1, delta: 2},
       {name: 'Second', parent: 1, delta: 1}
     ],
  2: [
       {name: 'Third', parent: 2, delta: 1}
     ]
}

Я могу сделать это, используя forEach или вложенные циклы, но мне интересно, есть ли способ использовать синтаксис ES6, чтобы сделать это немного более кратким / встроенным, что позволило бы мнеделать такие вещи, как сортировка по delta и т. д.

Ответы [ 4 ]

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

Вы можете использовать Array.reduce() для этого:

let myArray = [{
    name: 'First',
    parent: 1,
    delta: 2
  },
  {
    name: 'Second',
    parent: 1,
    delta: 1
  },
  {
    name: 'Third',
    parent: 2,
    delta: 1
  }
];
var res = myArray.reduce((acc, item) => {
  if (acc[item.parent]) {
    acc[item.parent].push(item);
  } else {
    acc[item.parent] = [item];
  }
  return acc;
}, {});
console.log(res);
0 голосов
/ 26 октября 2018

var myArray = [
  {name: 'First', parent: 1, delta: 2},
  {name: 'Second', parent: 1, delta: 1},
  {name: 'Third', parent: 2, delta: 1}
];

console.log(myArray.reduce((acc, val)=>({...acc, [val.parent]: (acc[val.parent] || []).concat(val)}), {}))
0 голосов
/ 26 октября 2018
const result = myArray.reduce((result, el) => {
  if (result[el.parent]) result[el.parent].push(el);
  else result[el.parent] = [el];
  return result;
}, {});
0 голосов
/ 26 октября 2018

Вы можете использовать уменьшить для достижения этого

var myArray = [
  {name: 'First', parent: 1, delta: 2},
  {name: 'Second', parent: 1, delta: 1},
  {name: 'Third', parent: 2, delta: 1}
];

var result = myArray.reduce((o,d) =>
             (
               o[d.parent] = (o[d.parent] || []).concat(d)
               , o
             )
             , {})
console.log(result)
...