当前位置: 首页 > 科技观察

判断数组成员的几种方法

时间:2023-03-15 15:19:11 科技观察

在开发中,我们经常需要查找数组中的元素,或者判断一个元素是否存在,所以我列出了几种常用的方法,供大家参考学习。indexOf()首先想到的是indexOf()方法,它搜索元素并返回第一个找到的位置的索引:[1,2,3,2].indexOf(2)//1他也支持第二个可选参数,指定开始搜索的位置:[1,2,3,2].indexOf(2,2)//3但是indexOf()有问题,它的实现是通过===判断的,所以这样很容易造成一些问题,比如对NaN会造成误判:[NaN].indexOf(NaN)//-1console.log(NaN===NaN)//false如上,由于误判,没有找到匹配的元素,所以返回-1,并且数组的ES6原型增加了一个新的includes()方法,可以替代indexOf(),我们来看看这个方法。includes()在ES6之前只有字符串的原型包含了include()方法来判断是否包含字符串,数组在ES6中也新增了一个include()方法来判断是否包含元素。让我们看看如何使用。[1,2,3].includes(2)//直接调用true数组实例,参数为要查找的目标元素,返回值为布尔值。而且他能很好的解决indexOf()的问题:[NaN].includes(NaN)//true如上includes()可以正确判断NaN的查找问题,而includes()是用来判断是否include,搜索条件比较简单,所以如果想自定义搜索条件,比如搜索的范围,可以使用这样一对方法:find()和findIndex()下面我们来看一下他们是如何使用的。find()和findIndex()find()和findIndex()可以匹配数组中满足条件的元素find()find()支持三个参数,分别是value,index,arr,分别是当前值,当前位置,and原数组,返回值为符号条件的值:letarr=[1,2,10,6,19,20]arr.find((value,index,arr)=>{returnvalue>10})//19如上,我取大于10的元素作为范围条件,返回第一个满足范围条件的值:19。而find()可以返回第一个满足条件的元素,所以如果我们想得到第一个满足条件的元素的索引,可以使用findIndex()。findIndex()findIndex()和find类似,同样支持三个参数,只是返回值不同。它返回符合条件的索引:letarr=[1,2,10,6,19]arr.findIndex((value,index,arr)=>{returnvalue>10})//例子4和find一样(),返回19对应的索引。对于NaN值,find()和findIndex()不会误判NaN值。可以使用Object.is()作为判断NaN值的范围条件,如下:[NaN].find((value)=>{returnObject.is(NaN,value)})//NaN与上面的例子,和findIndex()也是一样的。