将结果合并到一个对象中

时间:2013-09-02 11:52:45

标签: javascript jquery

我正在循环一组输入。我需要计算分组总数。输入如下三个类别中的一个。

如何将与三个类别相关的值组合起来?

var compoundedArray = new Array();

    holder.find(".dataset input").each(function(index) {
        var val = $(this).val();
        var dataType = $(this).data("type");

        var localObj = {};

        localObj[dataType] = val;
        compoundedArray.push(localObj);
    });

我有一个像这样的对象

[
    {
    "growth":30
    },
    {
    "growth": 40
    },
    {
    "other": 20
    }
]

如何遍历对象以生成类似

的内容
[
    {
        "growth": 70
    },
    {
        "other": 20
    }
]

如果我循环遍历初始数组对象

for (var i = 0; i < compoundedArray.length; i++) {
console.log(compoundedArray[i]);
}

我将如何检查以确保我没有重复项 - 并且我可以计算结果?

理想情况下,生成的格式可能是最好的

var array = [
    "matching": 50,
    "growth": 20    
]   

4 个答案:

答案 0 :(得分:1)

var array = [
    "matching": 50,
    "growth": 20    
] 

是无效的JS,但您可以创建表单

的对象
var obj = {
    "matching": 50,
    "growth": 20
};

这很容易做到,只需从一开始就使用一个对象:

var result = {};

holder.find(".dataset input").each(function(index) {
    var val = +$(this).val(); // use unary plus to convert to number
    var dataType = $(this).data("type");

    result[dataType] = (result[dataType] || 0) + val;
});

进一步阅读材料:

答案 1 :(得分:0)

您可以使用具有唯一键的对象(而不是数组)。

var compoundedObj = {};

$(".dataset input", holder).each(function() {
    var dataType = $(this).data("type");
    if(!compoundedObj.hasOwnProperty(dataType)) {
        compoundedObj[dataType] = 0;
    }
    compoundedObj[dataType] += parseInt($(this).val(), 10);
});

通过这种方式,您将获得如下对象:

{
    "growth": 70,
    "other": 20
}

Live demo

答案 2 :(得分:0)

http://jsfiddle.net/GFwGU/

var original = [{"growth":30},{"growth": 40},{"other": 20}]

// object to sum all parts by key
var sums = {}
// loop through original object
for(var index in original){
    // get reference to array value (target object)
    var outer = original[index]
    // loop through keys of target object
    for(var key in outer){
        // get a reference to the value
        var value = outer[key]
        // set or add to the value on the sums object
        sums[key] = sums[key] ? sums[key] + value : value
    }
}

// create the output array
var updated = []
// loop through all the summed keys
for(var key in sums){
    // get reference to value
    var value = sums[key]
    // create empty object
    var dummy = {}
    // build object into desired format
    dummy[key] = value
    // push to output array
    updated.push(dummy)
}

// check the results
alert(JSON.stringify( updated ))

答案 3 :(得分:0)

var add=function (a,b){ a=a||0; b=b||0; return a+b};
var input=[ {growth:30},{growth:40},{other:20} ],output=[],temp={};

$.each(input,function(i,o){
  var n;
  for(i in o)
     {n=i;break}
  temp[n]=add(temp[n],o[n]);
});

$.each(temp,function(i,o){
  var k={};
   k[i]=o;
  output.push(k)
});