JavaScript对象与阵列查找性能

14 javascript

在JavaScript对象中按键检索值与在单个JavaScript对象数组上进行迭代之间的性能差异是什么?

在我的例子中,我有一个包含用户信息的JavaScript对象,其中键是用户的ID,值是每个用户的信息.

我问这个的原因是因为我想使用该angular-ui-select模块来选择用户,但我不能将该模块与Javascript对象一起使用 - 它需要一个数组.

多少,如果有的话,我是通过从按键查找切换到迭代查找来牺牲的?

按键:

var user = users[id];
Run Code Online (Sandbox Code Playgroud)

通过迭代

var user;

for (var i = 0; i < users.length; i ++) {
  if (users[i].id == id) { 
    user = users[i]; break;
  }
}
Run Code Online (Sandbox Code Playgroud)

Ole*_*sen 13

答案取决于浏览器,但是,jsperf.com上就此问题进行了一些性能测试.它还取决于您的数据大小.通常,当您有大量数据时,使用对象键值对会更快.对于小型数据集,数组可以更快.

数组搜索将具有不同的性能,具体取决于目标项目在数组中的位置.对象搜索将具有更一致的搜索性能,因为密钥不具有特定顺序.

循环遍历数组比循环throigh键更快,因此如果您计划对所有项执行操作,将它们放在数组中是明智的.在我的一些项目中,我同时做这两件事,因为我需要进行批量操作并从识别器快速查找.

一个测试:

http://jsben.ch/#/Y9jDP

  • 嗯,红色测试结果(最快的),是最好的数组搜索。搜索到的项目是第一个,自然是快的。如果您查看最坏的情况,即该项目存在于数组中的最后一个位置,它会慢得多。对象搜索具有与位置无关的相当一致的查找性能。 (2认同)
  • 使用适当的高性能解决方案修复您的测试:http://jsben.ch/#/UM0ju (2认同)