我正在循环一组输入。我需要统计分组总数。
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]);
}
我将如何检查以确保我没有重复项 - 并且我可以计算结果?
答案 0 :(得分:0)
您可以使用for循环遍历Object。 如果要删除项目,只需将其设置为空。
示例:
for(var i in compoundedArray){
for(var j in compoundedArray){
if(i == j){
compoundedArray[i] += compoundedArray[j];
compoundedArray[j] = null;
}
}
}
答案 1 :(得分:0)
我认为您选择的数据结构有点过于复杂。尝试类似的东西。
var compoundedObject = {};
holder.find(".dataset input").each(function(index) {
var val = $(this).val();
var dataType = $(this).data("type");
//Assuming all values are integers and can be summed:
if( compoundedObject.hasOwnProperty(dataType) )
{
compoundedObject[dataType] += val;
}
else
{
compoundedObject[dataType] = val;
}
});
你最终会得到一个对象,而不是一个数组。
答案 2 :(得分: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)
});
在输出变量处查找输出。
不要发布很多具体的问题,这可能对其他人没有帮助。
答案 3 :(得分:0)
这很有效。它是纯粹的javascript。
var totals = {};
for (var i = 0; i < compoundedArray.length; i++) {
var item = compoundedArray[i];
for (var key in item) {
totals[key] = (totals[key] || 0) + item[key]
}
};
答案 4 :(得分:0)
您可以执行以下操作:
var totals = [], tmp = {};
for (var i = 0; i < compoundedArray.length; i++) {
var obj = compoundedArray[i];
for (var j in obj) {
tmp[j] = tmp[j] || 0;
tmp[j] += obj[j];
}
}
for(var k in tmp) {
var obj = {};
obj[k] = tmp[k];
totals.push(obj);
}
<强> See this working demo 强>