Set.has 和 Array.includes 到底应该用哪个?

开发 前端
查找操作(includes())在Array中是O(n),即线性时间复杂度,因为 JavaScript 中的数组是基于索引的线性结构。数组需要遍历每个元素,直到找到目标元素,如果你频繁需要检查元素是否存在,Array在性能上可能不如Set。

我们平时在 JavaScript 的开发中,我们会遇到一些需求:检测集合中是否包含了某一个元素,我们会使用两种方式:

  • Set.prototype.has()
  • 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() 的性能领先了一丢丢

图片图片

大数据场景

现在我们来进行大数据的场景,就把数据量加大到 1000000 个元素

图片图片

可以看出 Set.prototype.has() 性能更好

图片图片

责任编辑:武晓燕 来源: 前端之神
相关推荐

2024-07-10 10:54:44

2023-11-24 08:17:38

金额类型存储

2018-07-10 16:05:05

2021-07-01 16:45:17

PyTorchTensorflow 机器学习

2015-11-05 09:26:34

Fedora发行版Linux

2024-08-05 01:22:16

2014-12-05 09:49:18

2022-05-06 08:00:00

APIBallerina编程语言

2022-09-13 07:31:50

工具代码Lombok

2017-03-02 14:52:46

2022-07-06 09:29:40

JMH性能测试

2023-05-28 13:03:46

BeegoGin设计

2019-07-27 09:40:56

MySQLPG数据库

2023-01-18 08:25:23

数据库存储类型

2021-03-15 09:00:00

开发JavaKotlin

2021-03-04 09:11:57

日志开发打印

2020-12-09 18:36:28

ObjectArrayJavaSc

2020-11-18 09:48:09

Synchronize多线程Java

2010-06-13 09:31:45

WindowsLinux服务器操作系统

2020-10-28 09:32:01

Javareturnfinally
点赞
收藏

51CTO技术栈公众号