在不访问对象键的情况下循环访问对象值
Iterating through Object values without accessing object keys
我有一个非常大的对象,我只想遍历它的值。
如果我写一个像下面这样的循环,对于一个有 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
如果真的是性能问题,请看一下@达夫斯设备
相关文章:
- 如何使用此从对象访问构造函数
- LokiJS与标准Javascript对象访问
- JavaScript子对象访问自己的值
- Javascript嵌套对象访问根级别
- 即使使用 angular.fromJson() 也无法从 json 对象访问字符串
- 从表单到 Ajax 的动态对象访问
- 将 NodeJS 模块范围变量作为对象访问
- 能够从Meteor中的辅助对象访问特定值
- 从JavaScript对象访问数据's数组成员变量
- 如何从 React 中的事件对象访问自定义属性
- 函数中的对象访问;不起作用
- 如何在javascript中从JSON对象访问数组
- 如何从C#.Net Webbrowser对象访问javascript变量
- Javascript中最快的类/对象访问/实例化是什么
- 覆盖对象访问 JavaScript
- 如何从 jquery 中的另一个对象访问在一个对象中声明的变量
- 从 JavaScript 对象访问变量
- 如何从范围对象访问数据到指令
- 从vue.js中的对象访问v-repeat-overarray中的属性
- jQuery:从具有一个类的多个实例的对象访问元素