前言
大家好,我是林三心,用最通俗易懂的话讲最难的知识点是我的座右铭,基础是进阶的前提是我的初心~
我们平时在 JavaScript 的开发中,我们会遇到一些需求:
检测集合中是否包含了某一个元素
,我们会使用两种方式:
-
-
Array.prototype.includes()
对于这两种方式,其实都能完成我们的需求,但是其实这两种方式是有差异的,那就是
性能差异
接下来我们可以先来看看
Set
和
Array
在查找元素的时候,方式到底有哪些区别
-
Set:
查找操作
(has())
在
Set
中通常是
O(1)
,即常数时间复杂度。这是因为
Set
是基于哈希表实现的,它能够快速判断元素是否已经存在,当你需要频繁检查某个元素是否存在时,
Set
提供了更优的性能
-
Array:
查找操作
(includes())
在
Array
中是
O(n)
,即线性时间复杂度,因为 JavaScript 中的数组是基于索引的线性结构。数组需要遍历每个元素,直到找到目标元素,如果你频繁需要检查元素是否存在,
Array
在性能上可能不如
Set
小数据场景
如果我们的集合比较小的时候,使用
Set.prototype.has()
或
Array.prototype.includes()
会有什么性能上的差异呢?我们可以来测一测
我们将这两个代码放到测试平台上测:https://bestcodes.dev/projects/codeperf
可以发现,当集合数据量比较小的时候,没有什么明显的数据差异,但是可以看出
Set.prototype.has()
的性能领先了一丢丢
大数据场景