【发布时间】:2013-06-12 20:26:28
【问题描述】:
看了很多类似的问题后:
- JavaScript implementation of a set data structure
- Mimicking sets in JavaScript?
- Node JS, traditional data structures? (such as Set, etc), anything like Java.util for node?
- Efficient Javascript Array Lookup
- Best way to find if an item is in a JavaScript array?
- How do I check if an array includes an object in JavaScript?
我还有一个问题:假设我有一个大字符串数组(几千个),我必须进行多次查找(即多次检查给定字符串是否包含在这个数组中)。在 Node.js 中执行此操作的最有效方法是什么?
A.对字符串数组进行排序,然后使用二进制搜索?或:
B.将字符串转换为对象的键,然后使用“in”运算符
?
我知道A的复杂度是O(log N),其中N是字符串的个数。
但我不知道 B 的复杂性。
如果一个 Javascript 对象被实现为哈希表,那么 B 的复杂度平均为 O(1),比 A 好。但是,我不知道 Javascript 对象是否真的实现为一个哈希表!
【问题讨论】:
-
在 V8 中对象属性查找几乎是即时的,并且没有二分查找。您可以使用 [].filter(/./.test, /^bob$/i) 来查找“bob”的字符串元素,这比用户域搜索代码要快...
-
@apsillers 我编辑了我的问题,以表明我主要对 Node.JS 实现感兴趣。
-
@dandavis 我几乎可以肯定,一个简单的
Array.indexOf()会更快。 -
如果任何 JS 实现不使用散列或其他相当有效的方法来实现对象,那将是非常令人惊讶的。
-
@ErelSegalHalevi 只是在这个fiddle(最好在 Chrome 中)玩一点,或者直接在 node.js 中做类似的事情。我只测试了
indexOf与对象属性查找,是的,对象属性查找速度非常快,而且似乎执行时间为 O(1)。
标签: performance node.js