Javascript 基于键的对象数组归约与求和

Javascript 基于键的对象数组归约与求和,javascript,object,coffeescript,reduce,Javascript,Object,Coffeescript,Reduce,假设我在CoffeeScript中有以下对象数组: data = [ {date: "04/27/2017", number: 1}, {date: "04/28/2017", number: 2}, {date: "04/27/2017", number: 3}, {date: "04/29/2017", number: 4}, {date: "04/29/2017", number: 5} ] 我希望将数字值与日期值相加,创建此新数组: new_data = [ {

假设我在CoffeeScript中有以下对象数组:

data = [
  {date: "04/27/2017", number: 1},
  {date: "04/28/2017", number: 2},
  {date: "04/27/2017", number: 3},
  {date: "04/29/2017", number: 4},
  {date: "04/29/2017", number: 5}
]
我希望将数字值与日期值相加,创建此新数组:

new_data = [
  {date: "04/27/2017", number: 4},
  {date: "04/28/2017", number: 2},
  {date: "04/29/2017", number: 9}
]
使用
reduce
方法似乎是合理的,例如:

new_data = data.reduce (x, y) ->
  some logic

但我一辈子都想不出/找不到这样做的方法

您可以通过两个步骤完成您想要的操作

  • 将值分组到单个对象

    let reducer = (acc, cur) => {
      if (acc[cur.date] === undefined)
        acc[cur.date] = cur.number
      else
        acc[cur.date] = acc[cur.date] + cur.number
      return acc;
    }
    
    let grouped = data.reduce(reducer, {});
    
  • 将对象映射到数组

    Object.keys(counterRes).map((date) => { return { date, number: grouped[date] } })
    
  • 最终的结果就是你所追求的