了解 ES7 中的 Array.prototype.includes() 方法,让你的数组查询更高效

在日常的前端开发中,我们经常需要对数组进行查询操作,通常需要使用 Array.prototype.indexOf() 方法。但该方法的缺点是在大数组中查询较慢,而且不能查询 NaN 值。ES7 中新增了 Array.prototype.includes() 方法,可以解决上述问题,同时查询效率更高。

Array.prototype.includes() 方法简介

Array.prototype.includes() 方法用于判断一个数组是否包含某个指定的值,返回值为 truefalse。方法的基本语法如下:

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

其中,valueToFind 为需要查询的值;fromIndex 为起始查询位置,默认值为 0。

该方法返回值有两种:如果查询到该值,就会返回 true;若没有查询到该值,则返回 false

Array.prototype.indexOf() 方法也可以实现以上功能,语法如下:

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

二者使用方法的差别:前者直接返回 true/false,后者返回查询到的值在数组中的下标或 -1。

下面来看一个简单的示例:

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

Array.prototype.includes() 方法的优点

Array.prototype.indexOf() 方法相比,Array.prototype.includes() 方法有以下几个优点:

  1. 查询 NaN 值时返回正确的结果

使用 Array.prototype.indexOf() 方法,查询数组中的 NaN 值时,会返回 -1(即不存在),而查询非 NaN 值时,会将 NaN 当作一个普通值来处理。但使用 Array.prototype.includes() 方法,无论在何种情况下,都会返回正确的结果:

----- --- - --- ---- ---
------------------------------ -- --
------------------------------- -- ----
  1. 查询效率更高

对于大型数组,使用 Array.prototype.includes() 方法来查询值的效率,要比 Array.prototype.indexOf() 要高得多。例如:

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

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

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

在我的电脑上,Array.prototype.indexOf() 方法平均需要 3 ms 的时间才能完成,而 Array.prototype.includes() 方法则平均只需要 1 ms。

注意事项

需要注意的是,Array.prototype.includes() 方法不能识别数组中的空元素(即值为 undefined),如果数组中存在空元素,记得先将其转换为 null 或其他值。

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

总结

使用 Array.prototype.includes() 方法,可以更高效地查询数组中是否包含某个值,也可以避免 Array.prototype.indexOf() 方法所存在的局限性,同时代码简洁明了。在合适的场景下,建议使用该方法。

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


猜你喜欢

  • Material Design 中的控件组合规范详解

    Material Design 是 Google 推出的一种设计语言,旨在提供一种一致的设计风格,以便于用户在各种设备上使用不同的应用程序时,可以得到一致的体验。在 Material Design 中...

    1 年前
  • GraphQL 构建微服务的最佳实践

    最近的几年,微服务架构已经成为了构建大型、复杂应用系统的事实标准。与传统的基于单体架构的应用相比,微服务架构具有更好的可维护性、可伸缩性和故障隔离性。但是,微服务架构也带来了一些挑战。

    1 年前
  • Enzyme 中如何测试 React 组件中的 Children 组件

    Enzyme 中如何测试 React 组件中的 Children 组件 作为一个前端开发人员,我们都知道测试是十分必要的,而 Enzyme 是一款 React 组件测试工具,它提供了灵活简单的 API...

    1 年前
  • 利用 ES12 中的 WeakRefs 实现下一代 JS 引擎

    近年来,随着计算机科学和互联网技术的发展,前端开发变得越来越重要。JavaScript 作为现代互联网开发的核心语言,其性能优化一直是前端开发者们所关注的焦点。在这方面,ES12 中的 WeakRef...

    1 年前
  • ESLint 报错解决:'Promise' is not defined

    什么是 ESLint? ESLint 是一个 JavaScript 代码检查工具,它可以帮助开发者在编写代码过程中遵循一定的编码规范,保证代码质量的同时提高团队开发效率。

    1 年前
  • TailwindCSS 教程:如何自定制背景颜色

    TailwindCSS 是一种流行的 CSS 框架,它提供了一系列预定义的类来快速构建视觉元素。它的设计哲学是将样式规则分解为原子级别,从而可以快速编写自定义样式,同时保持代码的简单性和可维护性。

    1 年前
  • CSS Flexbox 实现流体布局的技巧

    CSS Flexbox (Flexible Box) 是一种新的布局模式,它可以帮助我们方便地实现灵活性和响应性的布局。在本篇文章中,我们将探讨如何利用 CSS Flexbox 实现流体布局,并介绍一...

    1 年前
  • ES11 之 private 访问

    JavaScript 是一种基于原型的语言,没有传统面向对象语言的公共/私有/受保护等访问控制级别,开发人员不得不通过约定来达到相同的效果。这不仅增加了维护成本,而且不太安全。

    1 年前
  • RxJS 的几种自动化操作技巧深度学习

    RxJS 是一个流式编程工具,在前端开发中可用于处理异步数据流、事件处理等。作为前端开发人员,我们可以利用 RxJS 工具包中的自动化操作技巧来优化代码并减少重复性工作。

    1 年前
  • Redis 如何进行版本升级?

    Redis 是一个快速、高效且多功能的数据存储解决方案,被广泛应用于 Web 应用程序中。但是随着时间的推移,Redis 的版本会不断更新,这就需要我们进行版本升级。

    1 年前
  • 如何优雅地封装 Redux 中间件?

    Redux 作为前端状态管理的利器,被广泛应用于众多项目中,而其中的中间件则起到了至关重要的作用。说白了,中间件就是对 Redux 的增强和扩展,在派发 action 前和派发 action 后扩展 ...

    1 年前
  • 经验分享:如何解决 Web Components 中全局 CSS 污染问题?

    在使用 Web Components 开发自定义组件时,由于 Web Components 的 Shadow DOM 特性,可以有效避免组件内部的样式与全局样式产生冲突,但有时还是会出现全局 CSS ...

    1 年前
  • 使用 Socket.io 实现客服系统

    随着互联网和移动设备的普及,越来越多的企业开始关注客服系统的建设。一个好的客服系统可以提高用户的满意度,增加企业的用户粘性,同时也能够为企业带来更多商业机会。在本文中,我们将学习如何使用 Socket...

    1 年前
  • Next.js中如何使用antd-mobile

    在现代化的Web应用程序中,使用高质量的UI组件是至关重要的。antd-mobile是一个流行的React UI库,它提供了许多常见的UI组件,如按钮、表格和卡片等,在实现现代化Web应用程序时能够提...

    1 年前
  • 使用 Hapi 框架实现短链接服务的实例教程

    短链接服务是将长链接转换为短链接的服务,常见于社交网络分享、互联网广告、电商专属优惠等场景。本文将介绍如何使用 Hapi 框架快速搭建一个短链接服务的实例教程。 1. Hapi 框架简介 Hapi 是...

    1 年前
  • ES10 中的新特性:Object.fromEntries 方法

    ES10 是 ECMAScript 的最新版本,其中包含了很多对前端开发者来说非常有用的新特性。其中一个特性就是 Object.fromEntries 方法,它可以使编码更容易和简单。

    1 年前
  • ES6 中的迭代器和生成器详解

    在 ES6 中,迭代器和生成器是两个非常重要的概念,它们可以用来遍历集合、异步数据流等等。本文将详细介绍 ES6 中迭代器和生成器的相关知识,并提供相应的示例代码,帮助读者更加深刻地理解这两个概念的作...

    1 年前
  • 如何在 Angular 中引用外部 JavaScript 库

    如何在 Angular 中引用外部 JavaScript 库 在 Angular 中,我们经常需要使用到一些外部 JavaScript 库,例如 jQuery、Bootstrap、Moment.js ...

    1 年前
  • MongoDB:在客户端完成与数据库的交互操作

    MongoDB是一款开源的文档型NoSQL数据库,以其性能优良、扩展性强和易于使用等方面的特点,而被越来越多的开发者所使用。在前端开发中,与数据库的交互操作是不可避免的,本文将详细讨述如何在客户端完成...

    1 年前
  • SASS mixins 的最佳实践

    SASS Mixins 的最佳实践 SASS 是一种常用的 CSS 预编译器,其 Mixins 功能可以将多个 CSS 属性封装起来,以便在样式表中重复使用。SASS Mixins 的最佳实践能够提高...

    1 年前

相关推荐

    暂无文章