利用 ES7 的 Array.prototype.includes 方法优雅地判断数组是否包含指定的值

在前端开发中,判断一个数组是否包含指定的值是非常常见的操作,通常会使用 indexOf 或 includes 方法来实现,其中,indexOf 方法返回查找到的元素在数组中的下标,如果没找到则返回 -1,而 includes 方法返回一个布尔值,表示数组中是否包含该元素。

在 ES7 中新增了 Array.prototype.includes 方法,可以方便地判断一个数组是否包含指定的值,而且代码也更加优雅。

方法介绍

Array.prototype.includes 方法用于判断一个数组是否包含一个指定的值。其语法如下:

---------------------------- -----------

其中,valueToFind 表示要查找的值,fromIndex 表示从数组中的哪个索引开始查找(可选参数),如果省略则默认从第一个元素开始查找。该方法返回一个布尔值,表示数组中是否包含该元素。

示例代码

下面是一个基本的使用示例,判断一个数组是否包含指定的值:

----- --- - --- -- -- -- ---
----- -------- - ----------------

---------------------- -- ----

从上面的例子可以看出,通过 includes 方法可以非常简单地判断一个数组是否包含指定的值。

接下来我们再看一个例子,判断一个数组中是否存在指定的对象:

----- --- - -
  - --- -- ----- ----- --
  - --- -- ----- ------- --
  - --- -- ----- ------- -
--
----- -------- - -------------- --- -- ----- ------- ---

---------------------- -- -----

结果发现不符合预期,includes 方法返回了 false。这是为什么呢?

原因在于 includes 方法比较两个值是否相同时,使用的是 Object.is 方法进行比较,而不是使用全等运算符(===)。而 Object.is 方法比较的是两个值是否相同,而不是两个对象是否相等。

因此,上面的例子中,虽然我们提供的值和数组中的对象看起来相同,但它们实际上是不同的对象,Object.is 方法返回的结果就是 false。如果要比较对象是否相等,可以使用 lodash 库的 isEqual 方法或自己实现一个比较函数。

下面是一个利用 isEqual 方法实现的例子,判断一个数组中是否存在指定的对象:

----- - - ------------------
----- --- - -
  - --- -- ----- ----- --
  - --- -- ----- ------- --
  - --- -- ----- ------- -
--
----- ----- - - --- -- ----- ------- --
----- -------- - ------------ -- -------------- --------

---------------------- -- ----

总结

Array.prototype.includes 方法可以方便地判断一个数组是否包含指定的值,它的使用也非常简单,比 indexOf 或 includes 方法更加优雅和语义化。需要注意的是,该方法比较值的方式和全等运算符有一些差异,需要注意使用。在实际开发中,我们可以选择自己实现一个比较函数或使用 lodash 库的 isEqual 方法来比较两个对象是否相等。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/64d0ce0ab5eee0b5257d0270


猜你喜欢

  • 报错解决:Node.js Error: ENOENT: no such file or directory 的解决方法

    在前端开发中,我们经常会遇到 Node.js 报错的情况。其中比较常见的是 ENOENT: no such file or directory 错误,该错误意味着指定的路径不存在或无法找到对应的文件或...

    1 年前
  • Webpack 与 Less 配合使用的技巧

    在前端项目开发中,Webpack 和 Less 是两个非常重要的工具。Webpack 作为模块打包工具,可以将多个模块打包到一起,优化网站性能;而 Less 则可以让我们更加方便地管理 CSS 样式。

    1 年前
  • 如何在 ESLint 中使用 Prettier 来格式化代码

    ESLint 是 JavaScript 代码静态分析工具之一,可以帮助我们找到代码中的问题并统一代码风格。Prettier 是一款代码格式化工具,可以自动化地格式化我们的代码,并帮助我们避免代码格式的...

    1 年前
  • ECMAScript 2020 中的 WeakRef 对 JavaScript 垃圾回收机制的改进

    在 JavaScript 中,垃圾回收机制是非常重要的一部分。它负责删除不再需要的对象,以便释放内存,从而让 JavaScript 的执行速度更快。而在 ECMAScript 2020 中,引入了 W...

    1 年前
  • RxJS 中 pluck 操作符详解

    在 RxJS 中,我们经常需要对一个数据流进行一些操作,例如筛选、映射、过滤等。而 pluck 操作符就是其中一个非常常用的操作符,它可以从一个数据流中提取特定的属性值。

    1 年前
  • Mongoose 使用总结及问题总结

    Mongoose 是一个用于在 Node.js 中编写 MongoDB 应用的 MongoDB 驱动。它提供了一个可以认为是 NoSQL 数据库的对象映射器(ODM)。

    1 年前
  • Kubernetes 中的 StatefulSet 详解

    在 Kubernetes 中,StatefulSet(有状态集合)是一种用来管理有状态应用的控制器。它可以保证每个 Pod 在集群中都有唯一的标识符,从而实现有状态应用的可扩展性、可靠性和可管理性。

    1 年前
  • Tailwind 中的 z-index 属性详解

    Tailwind 是一种流行的前端开发工具,它能够快速简单地定制样式,以及简化 CSS 样式表的编写。在 Tailwind 中,z-index 属性是一项非常重要且常用的功能,这意味着你需要了解它的使...

    1 年前
  • 使用 Chai.js 测试 Express 应用程序的常见错误及解决方法

    前言 Express 是一款流行的 Node.js Web 框架,可用于构建强大、高效的 Web 服务。在开发过程中,测试是不可或缺的一部分,尤其是在生产环境中,确保应用程序的稳定性和可靠性至关重要。

    1 年前
  • Socket.io 如何使用 JWT 认证方式

    前言 在现代 Web 开发中,安全性越来越受到关注。随着实时应用程序的出现,确保用户身份的安全性变得更为重要。Socket.io 是一个面向实时 Web 应用程序的库,它允许客户端和服务器之间进行实时...

    1 年前
  • Vue.js 中 computed 和 watch 的区别

    在 Vue.js 中,computed 和 watch 是两个常见的属性。它们都用于响应式地监听数据的变化,但它们的用法和功能有所不同。本文将详细讨论 computed 和 watch 的区别,希望可...

    1 年前
  • Cypress 测试框架中 Mock 数据的使用实践及优化

    前言 Cypress 是一个开源的前端测试框架,可以帮助我们进行端到端的自动化测试。在进行测试时,数据的准备和使用非常重要,我们需要有一个完善的数据来源,同时控制数据的质量和可靠性。

    1 年前
  • SSE 与 HTTP/2 的集成使用

    SSE 与 HTTP/2 的集成使用 随着Web应用程序的复杂性不断增加,服务器到客户端的实时通信已经成为实现更好、更流畅用户体验的必要方式之一。而Server-Sent Events(SSE)和HT...

    1 年前
  • 刚开始学习 CSS?不要忘记 CSS Reset 和 Normalize.css

    在前端开发中,CSS 是最核心的部分之一,它掌控了页面的样式和布局,让页面从一个普通的 HTML 文档变得更加优美和易于使用。但是,对于初学者来说,熟练地使用 CSS 并不容易,因为浏览器默认样式和盒...

    1 年前
  • Express.js 使用 Redis 实现高效的 Session 管理

    在使用 Express.js 开发服务器端应用程序时,经常需要使用 Session 来存储用户的登录状态或其他相关信息。然而,使用默认的 Memory 存储 Session 会带来一些性能问题,例如内...

    1 年前
  • CSS Flexbox 解惑:align-content 和 justify-content 区别详解

    CSS Flexbox 是一种用于布局的工具,可以让我们更灵活地控制页面中元素的排列和位置。在使用 Flexbox 的过程中,经常会涉及到 align-content 和 justify-conten...

    1 年前
  • ES9 中如何使用 Array.prototype.sort 进行参数排序

    ES9 中如何使用 Array.prototype.sort 进行参数排序 在前端开发中,经常需要对数组进行排序操作。ES9 中新增了一种方式可以方便地对数组进行参数排序,即使用 Array.prot...

    1 年前
  • RESTful API 中 HTTP 请求方法的含义

    在前端开发中,经常需要调用 RESTful API 接口来获取数据或者提交数据。RESTful API 定义了一组 Web 服务规范,是一种基于 HTTP 协议的 Web 服务通信架构,其中使用 HT...

    1 年前
  • MongoDB 的地理位置索引应用场景及实现方法

    简介 MongoDB 是一个开源、基于文档存储的 NoSQL 数据库。它支持跨平台操作和动态的查询语言,并具有极好的扩展性能力。 其中,MongoDB 的地理位置索引(Geospatial Index...

    1 年前
  • Sequelize ORM 如何识别和处理时间戳

    什么是 Sequelize ORM? Sequelize ORM 是一个基于 Node.js 的 ORM(Object Relational Mapping),可与多种关系型数据库配合使用,例如 My...

    1 年前

相关推荐

    暂无文章