我正在循环一组输入。我需要计算分组总数。输入如下三个类别中的一个。
如何将与三个类别相关的值组合起来?
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
]
答案 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
}
答案 2 :(得分:0)
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)
});