iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >利用JS十分钟怎么判断数组中存在元素
  • 814
分享到

利用JS十分钟怎么判断数组中存在元素

2023-06-07 13:06:43 814人浏览 八月长安
摘要

这篇文章主要讲解了“利用js十分钟怎么判断数组中存在元素”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“利用JS十分钟怎么判断数组中存在元素”吧!前言在前端开发中,经常会遇到要判断数组中是否存

这篇文章主要讲解了“利用js十分钟怎么判断数组中存在元素”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“利用JS十分钟怎么判断数组中存在元素”吧!

前言

前端开发中,经常会遇到要判断数组中是否存在某个元素。其实判断的方式有很多种,我们一个一个来了解下。

我们先来定义一个数组:

const arr = [ 13, false, 'abcd', undefined, 13, null, NaN, [1, 2], { a: 123 }, () => Date.now(), new Date('2021/03/04'), new RegExp('abc', 'ig'), Symbol('sym'),];

在这个数组中,我们包含了好几种类型:number, boolean, string, undefined, null, array, object, Date, Symbol 等。其中数字 13 出现了 2 次。

有备而来

1. indexOf

我们最熟悉的就是indexOf了,毕竟他出现的早,兼容性也好,使用起来也很方便。

如果存在该元素,则返回第一次出现的索引值;若整个数组不存在该元素,则返回-1。

1.1 使用方式

只要判断返回的数据是不是-1,就能知道数组中是否包含该元素。

arr.indexOf(13) >= 0; // true, indexOf返回0arr.indexOf(2) >= 0; // false, indexOf返回-1

与 indexOf 对应的是 lastIndexOf,从最后往前查找元素,若存在该元素,则返回在数组中的最后一个的索引;若不存在该元素,则返回-1。

arr.lastIndexOf(13) >= 0; // true, lastIndexOf返回4, 最后一次出现的索引

两个方法在判断变量是否存在时,调用方式是一样的。

1.2 第 2 个可选参数

indexOf 和 lastIndexOf 还有第 2 个可选参数 fromIndex,用来表示从哪个索引开始进行搜索。

在 indexOf 中,若 fromIndex 超过数组的长度,则直接返回-1,若为负数,则从最后往前数几个索引(arr.length-Math.abs(fromIndex)),然后开始往后搜索。

在 lastIndexOf 中,若 fromIndex 达到或超过数组的长度,则搜索整个数组;若为负数,则从最后往前数几个索引(arr.length-Math.abs(fromIndex)),然后开始往前搜索,若负数的绝对值超过了数组的长度,则直接返回-1。

arr.indexOf(13, 2); // 4, 从索引值2开始往后查找,首先找到的13的索引值为4arr.indexOf(13, -10); // 4, 从索引值1(11-10)开始往后检索arr.lastIndexOf(13, 2); // 0, 从索引值2往前开始搜索arr.lastIndexOf(13, -2); // 4, 从索引值9(11-2)开始往前搜索

而且 indexOf 和 lastIndexOf 中采用的是严格相等的方式(===)来判断的。

arr.indexOf(null); // 5, 在null的前面有几个假值false和undefined,也能准确找到null的索引值
瑟瑟发抖

2. includes

indexOf 主要是为了查找元素所在的索引值,只是我们可以用返回的索引值来间接判断数组中是否存在该元素。

而在 ES7(ES2016)中添加的includes方法,就是专门用来判断元素是否存在的。返回值为 true 或者 false,true 表示存在,false 表示不存在,简单明了。

arr.includes(13); // truearr.includes('abc'); // falsearr.includes(false); // true, 存在false元素

同时,includes 方法中也存在第 2 个可选参数 fromIndex,fromIndex 的用法与 indexOf 中的一样。若 fromIndex 超过数组的长度,则直接返回-1,若为负数,则从最后往前数几个索引(arr.length-Math.abs(fromIndex)),然后开始往后搜索。

arr.includes(13, 5); // false, 从索引值5开始往后检索,没检索到

到目前为止,后面的几种类型,例如 Array, Object, Date 和 Symbol,我们都没判断呢。我们现在来判断下后面的几个元素:

// 使用indexOf判断arr.indexOf(NaN); // -1arr.indexOf([1, 2]); // -1arr.indexOf({ a: 123 }); // -1arr.indexOf(() => Date.now()); // -1arr.indexOf(new Date('2021/03/04')); // -1arr.indexOf(new RegExp('abc', 'ig')); // -1arr.indexOf(Symbol('sym')); // -1// 使用includes判断arr.includes(NaN); // falsearr.includes([1, 2]); // falsearr.includes({ a: 123 }); // falsearr.includes(() => Date.now()); // falsearr.includes(new Date('2021/03/04')); // falsearr.includes(new RegExp('abc', 'ig')); // falsearr.includes(Symbol('sym')); // false

结局很惨,这几种元素在数组中都没有检索到。可是实际上在数组中都是真实存在的。

这是因为 indexOf 和 includes 都是采用严格相等的方式(===)来判定的。

NaN === NaN; // false, 两个NaN永远也不会相等[1, 2] === [1, 2]; // false, 每个声明出来的数组都有单独的存储地址{a: 123} === {a: 123}; // false, 同数组new Date('2021/03/04')===new Date('2021/03/04'); // false, 看着日期是相同的,但是用new出来的对象进行比较的,肯定是不相等的Symbol('sym')===Symbol('sym'); // Symbol类型的出现就是为了避免冲突创造出来的类型,括号里的属性仅是为了方便描述而已

针对这些无法被检索的类型,我们就需要自己写函数来判断特殊的类型了。

3. find 和 findIndex

find()和 findIndex()允许我们通过回调函数,来自定义判断的方式。

3.1 find 方法

find() 方法返回数组中满足提供的测试函数的第一个元素的值。否则返回 undefined。

find()方法无法检测数组中的 undefined 元素。

因为不存在和存在 undefined 元素,find()方法都会返回 undefined。这里我们就要考虑其他方式了,稍后再讲。

arr.find((item) => item === 13); // 13, 找到了元素13arr.find((item) => item === 3); // undefined, 没找到元素3arr.find((item) => item === undefined); // undefined, 也不知道是找到了还是没找到

对于上面稍微复杂点的类型,我们就需要特殊的判断了:

arr.find((item) => typeof item === 'number' && isNaN(item)); // NaN// array和object类型进行比较时,情况很复杂,因为每个元素的类型都无法确定// 如果确定都是基本类型,如string, number, boolean, undefined, null等,可以将其转为字符串再比较// 转字符串的方式也很多,如JSON.stringify(arr), arr.toString(), arr.split('|')等// 复杂点的,只能一项一项比较,或者使用递归arr.find((item) => item.toString() === [1, 2].toString()); // [1, 2]arr.find((item) => JSON.stringify(item) === JSON.stringify({ a: 123 })); // {a: 123}arr.find((item) => { if (typeof item === 'function') { return item.toString() === (() => Date.now()).toString(); } return false;}); // () => Date.now()arr.find((item) => { if (item instanceof Date) { return item.toString() === new Date('2021/03/04').toString(); } return false;}); // Thu Mar 04 2021 00:00:00 GMT+0800arr.find((item) => { if (item instanceof RegExp) { return item.toString() === new RegExp('abc', 'ig').toString(); } return false;}); // /abc/gi// Symbol确实没法比较,只能比较描述是否一样arr.find((item) => { if (typeof item === 'symbol') { return item.toString() === Symbol('sym').toString(); } return false;}); // Symbol(sym)

上面的判断代码在后面的方法也将会使用到。

3.2 两个元素进行比较

我们在上面对比了多种类型元素的比较,稍微来总结下。

先来定义一个函数:

const compare = (x, y) => {};
3.2.1 基本类型

对于元素是 string, number, boolean, undefined, null 等基本类型的,可以直接进行比较:

const compare = (x, y) => { return x === y;};
3.2.2 NaN 数据

NaN 用 typeof 来判断是 number 类型,但 NaN 不与任何数字相等,包括它自己。

const compare = (x, y) => { if (typeof x === 'number' && isNaN(x) && typeof y === 'number' && isNaN(y)) {  return true; } return x === y;};
3.2.3 Function 与 Date 与 RegExp

这些类型的,可以将变量转为字符串进行比较:

const compare = (x, y) => { if (typeof x === 'number' && isNaN(x) && typeof y === 'number' && isNaN(y)) {  return true; } if (  (typeof x === 'function' && typeof y === 'function') ||  (x instanceof Date && y instanceof Date) ||  (x instanceof RegExp && y instanceof RegExp) ||  (x instanceof String && y instanceof String) ||  (x instanceof Number && y instanceof Number) ) {  return x.toString() === y.toString(); } return x === y;};

对于 object 类型和 array 的,我们可以将每一项拆开,然后利用上面的方式再挨个儿比较。

3.3 findIndex 方法

如果还要判断数组中是否存在 undefined,我们可以使用findIndex()方法。

findIndex() 方法返回数组中满足提供的测试函数的第一个元素的索引。若没有找到对应元素则返回-1。

arr.findIndex((item) => item === undefined); // 3arr.findIndex((item) => item === 3); // -1, 没有找到数字3

其他数据格式的判断,与上面的 find()一样。

稀客呀

4. some

some() 方法测试数组中是不是至少有 1 个元素通过了被提供的函数测试。它返回的是一个 Boolean 类型的值。

注意:如果用一个空数组进行测试,在任何情况下它返回的都是 false。

some()方法与 find()方法的使用方式一样,只不过 some()方法返回的是 boolean 类型的数据。

arr.some((item) => item === false); // truearr.some((item) => item === undefined); // truearr.some((item) => typeof item === 'number' && isNaN(item)); // truearr.some((item) => item === 3); // false, 不存在数字3arr.some((item) => { if (item instanceof Date) {  return item.toString() === new Date('2021/03/04').toString(); } return false;}); // true

5. filter

filter() 方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。

无论找到几个元素或者没有元素,filter()方法都是会返回一个数组,数组中的数据就是我们想要的元素。

arr.filter((item) => item === false); // 1arr.filter((item) => item === undefined); // 1arr.filter((item) => typeof item === 'number' && isNaN(item)); // 1arr.filter((item) => item === 13); // 2arr.filter((item) => item === 3); // 0arr.filter((item) => { if (item instanceof Date) {  return item.toString() === new Date('2021/03/04').toString(); } return false;}); // 1

因此我们可以通过该数组的长度,来判断原数组是否包含我们想要的元素。

略略

6. 总结

查找数组中元素的方式有很多,我们可以数组中元素的格式,来选择更合适的方式。如果都是一些基本类型,建议优先选择使用includes()方法;如果格式比较复杂的,建议选择使用some()方法。这两个方法都是直接返回 boolean 类型,无需更多的转换即可直接使用方法的结果。

感谢各位的阅读,以上就是“利用JS十分钟怎么判断数组中存在元素”的内容了,经过本文的学习后,相信大家对利用JS十分钟怎么判断数组中存在元素这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: 利用JS十分钟怎么判断数组中存在元素

本文链接: https://www.lsjlt.com/news/249553.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 利用JS十分钟怎么判断数组中存在元素
    这篇文章主要讲解了“利用JS十分钟怎么判断数组中存在元素”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“利用JS十分钟怎么判断数组中存在元素”吧!前言在前端开发中,经常会遇到要判断数组中是否存...
    99+
    2023-06-07
  • python怎么判断元素在不在数组中
    可以使用in和not in操作符来判断元素在不在数组中。例如,假设有一个数组arr,我们想要判断元素x是否在数组中,可以使用以下代码...
    99+
    2023-09-05
    python
  • php怎么判断数组的元素是否存在
    在PHP中,判断数组元素是否存在的方法非常灵活,可以使用多种方式进行判断。本文将为你介绍PHP中判断数组的元素存在的五种常用方式。使用array_key_exists()函数array_key_exists()函数是PHP中用于检查数组中是...
    99+
    2023-05-14
  • JS判断元素是否存在数组中的方法有哪些
    这篇文章主要介绍“JS判断元素是否存在数组中的方法有哪些”,在日常操作中,相信很多人在JS判断元素是否存在数组中的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JS判断元素是否存在数组中的方法有哪些...
    99+
    2023-07-05
  • php怎么判断数组中是否存在重复元素
    PHP是一种运用广泛的脚本语言,广泛应用于Web开发。在PHP开发中,我们经常会涉及到数组这个数据类型。而判断数组中是否存在重复的元素也是一项很重要的任务。在本文中,我们将讨论如何使用PHP判断数组中是否存在重复元素。利用array_cou...
    99+
    2023-05-14
    php php数组
  • JS判断元素是否存在数组中的5种方式总结
    目录前言1. indexOf1.1,indexOf1.2,lastIndexOf1.3,第2个可选参数2. includes3. some4. filter5.&...
    99+
    2023-03-01
    js判断元素是否在数组中 js判断一个值是否在一个数组里面 js判断是否是数组
  • jquery如何判断数组元素是否存在
    在jquery中判断数组元素是否存在的方法:1.新建html项目,引入jquery;2.在项目中定义数组;3.使用$.inArray方法判断元素是否存在;具体步骤如下:首先,在新建一个html项目,在项目中引入jquery;<scri...
    99+
    2024-04-02
  • javascript数组如何判断是否存在某元素
    这篇文章给大家分享的是有关javascript数组如何判断是否存在某元素的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。JavaScript是什么JS是JavaScript的简称,它是一种直译式的脚本语言,其解释器...
    99+
    2023-06-14
  • c语言怎么判断元素是否在数组中
    在C语言中,可以通过遍历数组的每个元素来判断一个元素是否在数组中。以下是一个示例代码: #include int isEleme...
    99+
    2023-10-24
    c语言
  • php如何判断数组中是否存在重复元素
    这篇文章主要讲解了“php如何判断数组中是否存在重复元素”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php如何判断数组中是否存在重复元素”吧!利用array_count_values()函...
    99+
    2023-07-05
  • 使用JavaScript怎么判断元素是否存在
    这篇文章给大家介绍使用JavaScript怎么判断元素是否存在,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。JavaScript是什么JavaScript是一种直译式的脚本语言,其解释器被称为JavaScript引擎,...
    99+
    2023-06-14
  • js怎么判断数组中是否有元素通过了测试
    这篇文章主要介绍“js怎么判断数组中是否有元素通过了测试”,在日常操作中,相信很多人在js怎么判断数组中是否有元素通过了测试问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”js...
    99+
    2024-04-02
  • JavaScript如何判断数组是否存在指定元素
    这篇文章给大家分享的是有关JavaScript如何判断数组是否存在指定元素的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 JS中,可以使用some()...
    99+
    2024-04-02
  • es6如何判断元素是否在数组中
    本篇内容介绍了“es6如何判断元素是否在数组中”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • Python怎么判断一个整数数组是否存在重复元素
    本篇内容主要讲解“Python怎么判断一个整数数组是否存在重复元素”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python怎么判断一个整数数组是否存在重复元素”吧!问题:给定一个整数数组,你如...
    99+
    2023-06-02
  • javascript如何判断元素是否在数组中
    这篇文章将为大家详细讲解有关javascript如何判断元素是否在数组中,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 方法:1、使用inde...
    99+
    2024-04-02
  • Golang 如何判断数组某个元素是否存在 (isset)
    如,现在需要判断命令行是否传了参数,即 os.Args[1] 是否存在 如果使用下述的判断: package main import ( "fmt" "os" ) fu...
    99+
    2024-04-02
  • php如何判断数组里面是否存在某元素
    本篇内容介绍了“php如何判断数组里面是否存在某元素”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php判断数组里面是否存在某元素的方法:1...
    99+
    2023-07-04
  • java怎么判断数组元素是否重复
    Java中判断数组元素是否重复可以使用以下方法:1. 使用两层循环遍历数组,比较每对元素是否相同。如果找到相同的元素,则数组中存在重...
    99+
    2023-09-22
    java
  • php怎么判断数组中是否有重复元素
    在PHP编程中,常常会使用数组来存储和管理数据。有时候我们会需要判断一个数组中是否存在重复的元素。本文将介绍一些PHP的技巧来实现这个目的。方法一:使用array_unique()函数array_unique()函数可以用来去除数组中的重复...
    99+
    2023-05-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作