在不访问对象键的情况下迭代Object值

时间:2012-04-30 06:30:37

标签: javascript

我有一个非常大的对象,我只想迭代其值。

如果我编写如下所示的循环,对于具有1m键的对象,散列函数和散列查找将被调用1m次。出于性能原因,我想避免这种情况。

for (var key in myObj) {sum+=myObj[key]}

我可以以某种方式仅通过值迭代而不关心键吗?

4 个答案:

答案 0 :(得分:3)

我建议这里可能存在误解。

您可能知道Javascript对象不是简单数组,并且它们的特定内部实现对Javascript代码是隐藏的。对象是键值集合,我相信没有任何有保证的顺序。

你怎么知道使用for(myObj中的var键)进行散列键查找?

我认为没有任何保证,事实上,这样做需要知道计算哈希的密钥。然而,您要求所有值而不指定密钥。

对于(myObj中的var键)已经根据所需的最接近的可用内容(取决于所使用的浏览器或js引擎),有合理的可能性。我怀疑它更有可能直接扫描内部结构并避免计算哈希值,因为你想要所有键。

有关js实现的更多专家,标准可能会提供更多内容。

答案 1 :(得分:2)

对于这种事情,我建议保留2个不同的数组:一个用于键,一个用于值。

keys[0]="user"
values[0]={name:"aaa",email:".......
keys[1].....

所以你可以很快地迭代这两个

答案 2 :(得分:1)

没有。在库存JavaScript解释器上,没有办法获取没有名称的属性的值。

答案 3 :(得分:0)

不,这里没有办法避免使用密钥循环。顺便说一句,您在问题中描述的内容看起来更像是一个只包含数值的数组。你确定它是一个对象吗?然后,我做的第一个优化是使用数组来计算总和。在那之后,世界就在你的脚下:有许多ways to loop an array

Extra link
extra link 2

如果这确实是一个性能问题,请查看@ Duffs Device