0

我正在循环一组输入。我需要统计分组总数。以下输入为三个类别之一。

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

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

4 回答 4

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;
});

进一步阅读材料:

于 2013-09-02T11:58:28.490 回答
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
}

现场演示

于 2013-09-02T11:58:16.217 回答
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 ))
于 2013-09-02T12:02:33.880 回答
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)
});
于 2013-09-02T12:31:46.403 回答