【发布时间】:2016-05-12 03:26:04
【问题描述】:
使用javascript函数式编程方法(如map/reduce),如何聚合/计算arr1的status字段并将其转换为arr2中的键/值对象数组。
arr1 = [
{'task':'do something 1', 'status':'done'} ,
{'task':'do something 2', 'status':'done'} ,
{'task':'do something 3', 'status':'pending'} ,
{'task':'do something 4', 'status':'done'}
];
// Aggregate arr1 `status` field and transform to:
arr2 = [
{key:'done', value: 3},
{key:'pending', value: 1}
];
这是我的 WIP 部分解决方案,它仅处理聚合部分。我仍然需要转换部分。
var arr2 = arr1.map(function(item) {
return item.status;
}).reduce(function(acc,curr,idx){
if(acc[curr] === undefined) acc[curr] = 1;
else acc[curr] += 1;
return acc;
}, []);
【问题讨论】:
-
我只想做this,但不确定它是否足够“实用”。
-
您的解决方案没有给出预期的答案。或者提供的答案不正确。
-
我相信@Kiril 是对的,贴出的代码会产生
[done: 3, pending: 1],或者换句话说,它将数组视为对象,并且不会返回预期的结果? -
@adeneo,您的解决方案很棒。为什么不将其发布为答案?
-
@jboothe - 不太确定这是你想要的,但我会为后代发布
标签: javascript arrays dictionary functional-programming map-function