在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;
}
}
答案 0 :(得分:9)
这个问题的答案取决于浏览器,但是,jsperf.com上就此问题进行了一些性能测试。它还取决于您的数据大小。通常,当您有大量数据时,使用对象键值对会更快。对于小型数据集,数组可以更快。
阵列搜索将具有不同的性能,具体取决于目标项目在数组中的位置。对象搜索将具有更一致的搜索性能,因为密钥不具有特定顺序。
同时循环遍历数组比循环throigh键更快,因此如果您计划对所有项执行操作,将它们放在数组中是明智的。在我的一些项目中,我同时做这两件事,因为我需要进行批量操作和识别器的快速查找。
测试:
答案 1 :(得分:2)
此问题涉及所有编程语言。这取决于很多因素:
在您的示例地图中,这将是一个更好的解决方案。 其次,你需要为你的代码添加一个中断:)
var user;
for (var i = 0; i < users.length; i ++) {
if (users[i].id == id) {
user = users[i]; break;
}
}
或者你会失去表现:))
答案 2 :(得分:-3)
关联数组比带有编号索引的数组要慢得多,因为关联数组通过字符串比较来工作,这比数字比较慢得多!