Javascript 如何重新构造JSON对象

Javascript 如何重新构造JSON对象,javascript,arrays,json,Javascript,Arrays,Json,我实现了一个聚合函数,但现在唯一的问题是我丢失了key:value格式,例如[{name:“Apples”,val:8},{name:“Banana”,val:9}] function agrregate(a){ var targetObj = {}; var result; var b = JSON.parse(JSON.stringify(a)); var trees= b.length; if(!trees){ trees = 0

我实现了一个聚合函数,但现在唯一的问题是我丢失了key:value格式,例如
[{name:“Apples”,val:8},{name:“Banana”,val:9}]

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;
}
而不是

{name:"Apple", val:8}, {name:"Banana", val:9}

使用减速机进行聚合。您不需要使用
JSON
stringify/parse

要返回到对象数组,请使用
map
Object.keys

var test=[{name:“Apples”,val:5},{name:“Banana”,val:9},{name:“Apples”,val:3}]
var聚合=函数(arr){
返回arr.reduce(函数(result,obj){//创建一个对象(result)
结果[obj.name]=(结果[obj.name]| | 0)+obj.val;//添加新键/或增加
返回结果//返回对象
}, {});
};
var wrap=功能(obj){
return Object.keys(obj)//创建一个键数组
.map(功能(键){
返回{//指定格式
姓名:key,,
val:obj[键]
};
});
};
控制台日志(聚合(测试));

日志(包装(聚合(测试))
JSON(或JS)不能这样做-您不能有一个对象,两个相同的属性名具有不同的值-
{name:'a',name:'b'}
将计算为
{name:'b'}
您的源数据是什么样子的?谢谢您的选择,但我现在需要的是能够执行键值对循环。@MadulaShokengSelowa您可以。这很好,可以产生您想要的输出。
aggregate
让您从一个数组到另一个对象,
wrap
让您从一个对象到另一个数组。我不确定你还需要什么,你能详细说明一下吗?它只会打印值,我如何打印密钥。我使用AngularJs,如果我很固执,甚至连一个例子都不能做到这一点。谢谢。我为自己是一个傻瓜而道歉。关于数据结构,我仍然不时地受到一些批评,但它现在起作用了。
{name:"Apple", val:8}, {name:"Banana", val:9}