我实现了一个聚合函数,但我现在唯一的问题是我丢失了我的密钥:值格式,例如<test></test>
。
[{name:"Apples",val:8},{name:"Banana",val: 9}]
这是我在agrregate函数完成时得到的结果。
function agrregate(a){
var targetObj = {};
var result;
var b = JSON.parse(JSON.stringify(a));
var trees= b.length;
if(!trees){
trees = 0
}
for (var i = 0; i < trees; i++) {
if (!targetObj.hasOwnProperty(b[i].key)) {
targetObj[b[i].key] = 0;
}
targetObj[b[i].key] += b[i].val;
}
result = JSON.stringify(targetObj);
return result;
}
而不是
{"Apple":8,"Banana":9}
答案 0 :(得分:1)
使用减速器进行聚合。你不需要用JSON
stringify / parse来做任何事情。
要返回对象数组,请使用map
和Object.keys
var test = [{name:"Apples",val:5},{name:"Banana",val: 9},{name:"Apples",val:3}]
var aggregate = function(arr) {
return arr.reduce(function(result, obj) { // Create one object (result)
result[obj.name] = (result[obj.name] || 0) + obj.val; // Add a new key/or increase
return result // Return the object
}, {});
};
var wrap = function(obj) {
return Object.keys(obj) // Create an array of keys
.map(function(key) {
return { // Specify the format
name: key,
val: obj[key]
};
});
};
console.log(aggregate(test));
console.log(wrap(aggregate(test)));