示例 1:
["member1", "member2",...,..., "member100000"]
示例 2:
{
"member1": true, // (doesn't really need values, only keys :/)
"member2": true,
"...",
"member100000": true
}
我像示例 1 一样,将成员存储在每个内容的数组中,但这样做我必须遍历数组中的 49999 个项目,才能找到成员 50000,所以我的想法很简单检查一个特定的键是否在 javascript 对象中定义是一个更好的方法,虽然我不需要存储一个值,但只检查键是否未定义?
我需要的是能够检查是否例如。 “member50000”作为一个值存在于我的数组中 - 或者作为一个键存在于我的对象中。
我做了一些基准测试,但我不确定我得出的结论是否正确,或者我在比较中是否做错了什么:http://jsperf.com/lolda123
根据上面的测试结果,是否可以得出这样的结论:在值为 bool 值 (true) 的对象中保存键/值对,然后执行 if(obj["member50000"])
是性能最佳的选项?即使不存在具有给定键的属性?正如我所看到的,根据我的测试结果,检查 key 本身是否存在,在性能方面似乎要昂贵得多,但检查 key 是否存在,确实是我所需要的。
我不关心值,所以我在这里遗漏了什么,或者为什么更好的解决方案看起来像是通过键查找值的解决方案,而不是仅仅在内部查找键对象?
最佳答案
好吧,我也是这么想的,使用对象会更快,但事实证明我错了!
我在 NodeJS 6.3(V8 引擎)上使用与 jsPerf 相同的堆栈运行性能测试:
https://github.com/amoldavsky/js-array-indexof-vs-hashmap
结果是:
- 在更大的数据集上查找速度更快
- 创建对象数据结构(基本上是一个 HashMap)非常昂贵!比使用数组慢得多
- 结合插入和查找时,array.indexOf 的速度要快很多
如果您认为我在任何测试中犯了错误,请随时提出来,我们可以重新测试。尽管到目前为止,array.indexOf 看起来要快得多。
关于javascript - 对象键与数组查找性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30399073/