【问题标题】:Javascript: what lookup is faster: array.indexOf vs object hash?Javascript:什么查找更快:array.indexOf 与对象哈希?
【发布时间】:2015-11-20 23:19:06
【问题描述】:

如果我需要一些标签,我必须执行 LOT 的查找,同时解析 xmlStream。

我可以使用 array.indexOf 方法(我在数组中有大约 15 个项目)或使用 object[key] 查找来做到这一点。

第二种解决方案在理论上对我来说似乎更有效,但在我的代码中看起来不太好。但如果它真的更有效,我会保持原样。

例如:

var tags = [
    'tag1',
    'tag2',
    'tag3',
    ...
];

var tags2 = {
    'tag1' : null,
    'tag2' : null,
    'tag3' : null,
}

tags.indexOf(value) // exists?
tags2[value] // exists?

【问题讨论】:

  • indexOf 是 O(n),哈希是 O(​​1),afaik
  • 你试过了吗? jsperf.com
  • 这对我来说似乎是个好问题,为什么它被否决了?
  • 我想说选择最有意义的结构。 15 项不算什么,不会引人注意,你冒着让代码难以阅读的风险,而没有明显的好处。

标签: javascript arrays object


【解决方案1】:

Object 键查找比Array.indexOf() 快。你可以在jsperf查看。

测试结果:

数组

10000 个项目的索引:26,547 次操作/秒
100000 个项目的索引:2,493 次操作/秒

对象

10000 项的查找键:152,115 次操作/秒
100000 项的查找键:150,450 次操作/秒

【讨论】:

  • 这很重要。感谢您链接到测试
【解决方案2】:

嗯,性能取决于您的设置大小和访问模式。一般来说,indexOf 是 O(n),hash 是 O(1),但是,由于集合中只有大约 15 个项目,假设每次访问都是完全独立且等概率的,hash 的优势并不真正存在.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-25
    • 2017-07-18
    • 2018-07-24
    • 2020-10-03
    • 2012-09-18
    • 1970-01-01
    • 2019-11-06
    相关资源
    最近更新 更多