gpt4 book ai didi

javascript - 检查对象中的键是否比在数组中搜索字符串更有效?

转载 作者:行者123 更新时间:2023-12-01 02:21:13 24 4
gpt4 key购买 nike

我正在创建一个数据结构,其中包含我将用来重复检查是否定义了某些值的数据结构。我提出了两种可能的解决方案,并且想知道哪种方法更有效,或者是否有比这两种方法更好的方法:

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”运算符
- 测试对象的属性值

这里有大约 10 项的 psperf: http://jsperf.com/key-or-array-search/2 enter image description here

我们可以看到,在 Firefox 上使用对象的属性值要快得多(比数组快 20 倍,比 in 快 5 倍)。
在 Safari 上,一切都比 Firefox 慢,但对象属性访问速度却快了两倍多。
但在 Chrome 上我不明白发生了什么:所有 3 种方法都非常接近,但最快的是 array/indexOf 方法,...

表演常常令人惊讶。

请注意,结果可能会发生变化,甚至发生巨大变化,具体取决于键的数量(5、20、5000?),以及检查的键位于集合内的概率。

我想知道如果使用 500 长度的 key 数组,情况会发生怎样的变化。结果如下: http://jsperf.com/key-or-array-search/3 enter image description here

我们看到数组因“大”键数而失败。
所以你必须弄清楚你所处的情况。
通过少量的键计数,处理属性的开销使数组获胜。
由于键数量较多,数组内迭代的成本使属性获胜......

关于javascript - 检查对象中的键是否比在数组中搜索字符串更有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18706085/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com