Как объединить элемент в массиве, который имеет одинаковое значение свойства

#javascript #arrays #object

#javascript #массивы #объект

Вопрос:

Для следующего массива:

 [{a:1,b:1},{a:5,b:2},{a:10,b:2},{a:20,b:3}]
 

Как мне получить новый массив, который объединяет элементы с одинаковым значением свойства b и суммирует значение свойства a ? В этом случае я надеюсь получить следующий результат:

 [{a:1,b:1},{a:(5 10),b:2},{a:20,b:3}]
 

Ответ №1:

Вы могли бы использовать комбинацию Array.reduce и Array.find следующим образом:

 const result = arr.reduce((acc, cur) => {
  const prev = acc.find((item) => item.b === cur.b)

  if (prev) {
    prev.a  = cur.a
  } else {
    acc.push(cur)
  }

  return acc
}, [])