专栏名称: 前端之神
一位前端小菜鸡,写过300多篇原创文章,全网有5w+个前端朋友,梦想是成为”前端之神“~
目录
相关文章推荐
湖北工信  ·  小米落子武汉,最新消息! ·  2 天前  
湖北工信  ·  小米落子武汉,最新消息! ·  2 天前  
红杉汇  ·  会议越混乱越好?来听听贝索斯怎么说 ·  2 天前  
概念股逻辑  ·  DeepSeek概念股崛起:揭秘科技投资界的新蓝海 ·  2 天前  
概念股逻辑  ·  DeepSeek概念股崛起:揭秘科技投资界的新蓝海 ·  2 天前  
51好读  ›  专栏  ›  前端之神

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

前端之神  · 公众号  ·  · 2025-01-22 09:10

正文

前言

大家好,我是林三心,用最通俗易懂的话讲最难的知识点是我的座右铭,基础是进阶的前提是我的初心~

我们平时在 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() 的性能领先了一丢丢

大数据场景







请到「今天看啥」查看全文