Как я могу отфильтровать и изменить каждый объект в массиве в JavaScript? - PullRequest
0 голосов
/ 22 июня 2019

Я разрабатываю небольшое веб-приложение, которое получает массив объектов из API и затем показывает результат на странице после добавления некоторых данных к каждому объекту и удаления других объектов.

Я пробовал chechinkесли текущий элемент индекса такой же, как у nexts, но по какой-то причине он не работает.

const initialArray = [
{ x: 'one', y: 'place1'},
{ x: 'one', y: 'place1'},
{ x: 'two', y: 'place2'},
{ x: 'three', y: 'place3'},
{ x: 'three', y: 'place3'},
{ x: 'three', y: 'place3'},
{ x: 'four', y: 'place4'}
]

Ожидаемый результат должен быть:

let resArray = [
{ x: 'one' , y: 'place1', count: 2},
{ x: 'two', y: 'place2', count: 1 },
{ x: 'three', y: 'place3', count: 3 },
{ x: 'four', y: 'place4', count: 1 }
]

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

1 Ответ

0 голосов
/ 22 июня 2019

Вы можете использовать reduce()

const initialArray = [
  { x: 'one', y: 'place1'},
  { x: 'one', y: 'place1'},
  { x: 'two', y: 'place2'},
  { x: 'three', y: 'place3'},
  { x: 'three', y: 'place3'},
  { x: 'three', y: 'place3'},
  { x: 'four', y: 'place4'}
];

const res = initialArray.reduce((ac,{x,y}) => {
  let k = `${x}_${y}`
  if(!ac[k]) ac[k] = {x,y,count:0};
  ac[k].count++;
  return ac;


},{})
console.log(Object.values(res))
...