首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript对象与数组查找性能

JavaScript对象与数组查找性能
EN

Stack Overflow用户
提问于 2014-10-14 13:45:17
回答 3查看 26.5K关注 0票数 20

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

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

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

如果有的话,我从键查找切换到迭代查找,牺牲了多少?

按键:

代码语言:javascript
复制
var user = users[id];

按迭代

代码语言:javascript
复制
var user;

for (var i = 0; i < users.length; i ++) {
  if (users[i].id == id) { 
    user = users[i]; break;
  }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-14 14:01:26

这个问题的答案取决于浏览器,然而,在jsperf.com上有一些关于这个问题的性能测试。这也取决于你的数据的大小。通常,当您有大量数据时,使用对象键值对会更快。对于较小的数据集,数组可以更快。

根据目标项在数组中的位置不同,数组搜索将具有不同的性能。对象搜索将具有更一致的搜索性能,因为键没有特定的顺序。

此外,循环遍历数组比循环遍历键更快,因此,如果您计划对所有项执行操作,明智的做法是将它们放在一个数组中。在我的一些项目中,我两者都做了,因为我需要进行批量操作和从标识符快速查找。

一个测试:

http://jsben.ch/#/Y9jDP

票数 19
EN

Stack Overflow用户

发布于 2014-10-14 14:37:17

这个问题涉及到所有编程语言。这取决于许多因素:

当你在搜索最后一个键时,你的集合数组的大小会变得更慢,而

  • 是相当长的,
  • 元素可以自己重复它们-如果是,那么你就需要一个数组。如果不是:您需要一个字典(映射),或者您需要编写一个add方法来迭代您的数组并查找可能的重复项-在处理大型列表
  • 平均键使用时,这可能会很麻烦-如果请求最多的userId位于列表的末尾,则性能将会下降。

在您的示例中,map将是一个更好的解决方案。其次,您需要在您的代码中添加一个分隔符:)

代码语言:javascript
复制
var user;

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

否则您将失去性能:)

票数 3
EN

Stack Overflow用户

发布于 2017-01-10 01:44:20

关联数组比索引编号的数组慢得多,因为关联数组是通过字符串比较来工作的,这比数字比较慢得多!

票数 -5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26353417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档