如何比较和计算几个对象的实例'在javascript中放置在数组中的属性值?

时间:2014-04-25 20:31:19

标签: javascript arrays loops object

我一直在尝试计算放在数组中的几个对象的属性值实例。我正在找到一种方法来有效地迭代这些值。 数组的结构可能如下所示:

var arr=[{1:["option1","option2"],2:["option2"],3:["option1"]},{1:["option2","option1"],2:["option1"],3:["option1"]}]

数组可能包含未知数量的对象。每个对象属性可能包含放入数组的未知数量的值。每个对象都具有相同的属性,因此我只是尝试将所有对象属性与第一个对象合并。我相信它看起来很笨拙且可读性差,但这是我到目前为止找到的唯一方法。它几乎可以工作,但我相信这种行为可能无法预测。

for(var firstobj=0,val=0,i=1,prop=1;arr.length>i;prop++,val++)
{
 if(prop>Object.getOwnPropertyNames(arr[i]).length)
{
    i++;
    prop=1;
}
else if(prop<Object.getOwnPropertyNames(arr[i]).length)
{
    i+0;
}
if(arr[i][prop].length<=val)
 {
  val=0;  
}
arr[firstobj][prop].push(arr[i][prop][val]);
}

正如您所见,我尝试通过移动到下一个数组索引(i)来操纵迭代,只有当对象的属性[prop]到达结尾并尝试通过将val默认为0来控制内部数组迭代,如果它变得大于数组的长度。但是,我对此代码不满意。也许你可以建议任何其他问题的解决方案。如何更好地准备多个对象值以便以后计算每个属性的出现次数?感谢。

1 个答案:

答案 0 :(得分:1)

使用嵌套循环处理每个级别的数组或对象。

for (var i = 0; i < arr.length; i++) {
    var obj = arr[i];
    for (var key in obj) {
        if (obj.hasOwnProperty(key)) { // skip properties inherited from prototype
            var arr2 = obj[key];
            for (var j = 0; j < arr2.length; j++) {
                // Do something with arr2[j]
            }
        }
    }
}