在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;
}
}发布于 2014-10-14 14:01:26
这个问题的答案取决于浏览器,然而,在jsperf.com上有一些关于这个问题的性能测试。这也取决于你的数据的大小。通常,当您有大量数据时,使用对象键值对会更快。对于较小的数据集,数组可以更快。
根据目标项在数组中的位置不同,数组搜索将具有不同的性能。对象搜索将具有更一致的搜索性能,因为键没有特定的顺序。
此外,循环遍历数组比循环遍历键更快,因此,如果您计划对所有项执行操作,明智的做法是将它们放在一个数组中。在我的一些项目中,我两者都做了,因为我需要进行批量操作和从标识符快速查找。
一个测试:
http://jsben.ch/#/Y9jDP
发布于 2014-10-14 14:37:17
这个问题涉及到所有编程语言。这取决于许多因素:
当你在搜索最后一个键时,你的集合数组的大小会变得更慢,而
在您的示例中,map将是一个更好的解决方案。其次,您需要在您的代码中添加一个分隔符:)
var user;
for (var i = 0; i < users.length; i ++) {
if (users[i].id == id) {
user = users[i]; break;
}
}否则您将失去性能:)
发布于 2017-01-10 01:44:20
关联数组比索引编号的数组慢得多,因为关联数组是通过字符串比较来工作的,这比数字比较慢得多!
https://stackoverflow.com/questions/26353417
复制相似问题