cke*_*sch 2 javascript arrays jquery
我正在创建一个数据结构,其中包含我将用于反复检查以查看是否定义了某些值的数据结构.我想出了两个可能的解决方案,我想知道哪个更有效率,或者是否有比以往更好的方法:
1)使用数组: keys = ['key1' , 'key2', 'key3']
我可以像这样创建一个数组然后jQuery.inArray(keyToCheck, keys) > -1用来检查是否keyToCheck在我的数组中.
2)使用对象: keys = {key1 : 1, key2 : 1, key3: 1}
我可以创建此对象,然后使用keys[keyToCheck] || 0以查看是否keyToCheck已定义.
我不确定的是如何在javascript中实现搜索对象,以及它是否比jQuery.inArray循环数组更有效.这些方法之间是否存在性能差异?使用jQuery对我来说不是问题,因为我已经在我的代码中出于其他原因.
当想知道表演时,获得答案的方法是在jsperf上测试几个案例.
(可能还有其他我不知道的基准网站,如果您认识另一个,请发表评论,我不是故意做广告)
对于您的情况,我测试了3种方法:
- 在数组中使用indexOf
- 使用'in'运算符
- 测试对象的属性值
psperf在这里大约有10个项目在这里:http://jsperf.com/key-or-array-search/2

我们可以看到在Firefox上使用对象的属性值要快得多(> 20倍于数组,> 5倍).
在Safari上,一切都比在Firefox上慢,对象属性访问仍然快两倍以上.
但是在Chrome上我不明白发生了什么:所有3种方法都非常接近,但最快的是数组/ indexOf方法,......
表演通常令人惊讶.
请注意,结果可能会发生变化 - 甚至会发生显着变化 - 取决于键的数量(5,20,5000?),以及检查键在集合中的概率.
我想知道500长度的关键阵列会发生什么变化.结果如下:http:
//jsperf.com/key-or-array-search/3

我们看到阵列因"大"键数而被击败.
所以你必须弄清楚你所处的情况.
通过一点关键计数,处理一个属性的开销使得数组获胜.
由于密钥数量很大,在数组中迭代的成本使得该属性获胜......
| 归档时间: |
|
| 查看次数: |
1969 次 |
| 最近记录: |