在不访问对象键的情况下循环访问对象值

Iterating through Object values without accessing object keys

本文关键字:对象 访问 循环 情况下      更新时间:2023-09-26

我有一个非常大的对象,我只想遍历它的值。

如果我写一个像下面这样的循环,对于一个有 1m 键的对象,哈希函数和哈希查找将被调用 1m 次。出于性能原因,我想避免这种情况。

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

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

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

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

你怎么知道使用 for(myObj 中的 var 键)可以查找哈希键?

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

有一个合理的概率,对于(myObj 中的 var 键)已经做了最接近你想要的事情(取决于使用的浏览器或 js 引擎)。我怀疑它更有可能直接扫描内部结构并避免计算哈希,因为您想要所有密钥。

在js实现方面更专家的人,标准可能会在这方面提供更多

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

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

因此,您可以非常快速地迭代两者

No. 在股票 JavaScript 解释器上,没有名称的属性无法获取值。

不,这里没有办法避免使用键循环。顺便说一下,您在问题中描述的内容看起来更像是一个只有数值的数组。你确定它是一个对象吗?然后我要做的第一个优化是使用数组来计算总和。之后,世界就在你脚下:有很多方法可以循环数组。

额外链接
额外链接 2

如果真的是性能问题,请看一下@达夫斯设备