如何重构我的JSON对象

时间:2016-11-04 12:34:51

标签: javascript arrays json

我实现了一个聚合函数,但我现在唯一的问题是我丢失了我的密钥:值格式,例如<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}

1 个答案:

答案 0 :(得分:1)

使用减速器进行聚合。你不需要用JSON stringify / parse来做任何事情。

要返回对象数组,请使用mapObject.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)));