假设我在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 :(得分:0)
你可以通过两个步骤完成你想要的任务
将值分组到单个对象
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] } })
最终结果就是你所追求的目标。