2017-04-18 252 views
0

对象的数组假设我有对象中的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 

但我不能为我的生活出/找到这样的一种方式......

回答

0

你可以做你在2想要什么步骤

  1. 组值单个对象

    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, {}); 
    
  2. 地图对象到一个Array

    Object.keys(counterRes).map((date) => { return { date, number: grouped[date] } }) 
    

最终的结果就是你所追求的。