【发布时间】:2014-10-14 05:45:17
【问题描述】:
在 JavaScript 对象中通过键检索值与遍历单个 JavaScript 对象数组之间的性能差异是什么?
在我的例子中,我有一个包含用户信息的 JavaScript 对象,其中键是用户的 ID,值是每个用户的信息。
我问这个的原因是因为我想使用angular-ui-select 模块来选择用户,但我不能将该模块与 Javascript 对象一起使用 - 它需要一个数组。
从按键查找切换到迭代查找,我会牺牲多少(如果有的话)?
按键:
var user = users[id];
通过迭代
var user;
for (var i = 0; i < users.length; i ++) {
if (users[i].id == id) {
user = users[i]; break;
}
}
【问题讨论】:
-
不要将 JavaScript 对象与 JSON 混淆!
-
这很不公平:线性搜索(您的数组循环)与近乎随机的访问(哈希表实现)
-
这里有一个快速的基准测试,可以帮助你:jsben.ch/#/Y9jDP
-
这是过时的解决方案,您总是使用:users.find(user => user.id === id) 这是固定基准:jsben.ch/#/UM0ju
-
@Hatch 也许,但当您需要支持旧版浏览器时则不然。您需要一个 polyfill 用于该方法和一个转译器用于
=>箭头函数。
标签: javascript