当前位置 : 主页 > 编程语言 > java >

JavaScript判断数组是否包含某元素

来源:互联网 收集:自由互联 发布时间:2022-08-10
find()与findIndex()方法 let arr = [1, 2, undefined, '听风是风', 'echo']; //利用indexOf查找下标的特性 let result = arr.find(ele = ele === '听风是风')//听风之风 if (result) { //do something... }; find方法是比较推荐


  • find()与findIndex()方法
  • let arr = [1, 2, undefined, '听风是风', 'echo'];

    //利用indexOf查找下标的特性
    let result = arr.find(ele => ele === '听风是风')//听风之风
    if (result) {
    //do something...
    };

    find方法是比较推荐的做法,find方法会找到第一个符合条件的数组元素,并返回它,如果没找到则返回undefined。

    需要注意的是,只要find找到符合条件的对象后不会继续遍历,可以说自带了break操作,加上箭头函数简化回调,整体代码非常直观。

    let arr = [1, 2, undefined, '听风是风', 'echo'];

    //利用indexOf查找下标的特性
    let result = arr.findIndex(ele => ele === '听风是风')//3
    if (result>-1) {
    //do something...
    };

    findIndex方法与find方法非常类似,只是它返回的不是符合条件的对象,而是该对象的下标,找到后同样会跳出循环,如果没找到则返回-1,这一点与indexOf有点类似。

    比较理想的是,find方法还能结合Object.is()方法判断NaN,当然也能判断其它对象,是不是非常的nice?

    [NaN].find(ele => Object.is(NaN, ele)); //NaN
    [1].find(ele => Object.is(1, ele)); //1
    [NaN].findIndex(ele => Object.is(NaN, ele)); //0
    [1].findIndex(ele => Object.is(1, ele)); //0

    写法简洁,自带break,还能判断NaN,这两个方法都比较推荐。

  • some()方法
  • let arr = [1, 2, undefined, '听风是风', 'echo'];

    //利用indexOf查找下标的特性
    let result = arr.some(ele => ele === '听风是风') //true
    if (result) {
    //do something...
    };

    some方法同样用于检测是否有满足条件的元素,如果有,则不继续检索后面的元素,直接返回true,如果都不符合,则返回一个false。

    用法与find相似,只是find是返回满足条件的元素,some返回的是一个Boolean值,从语义化来说,是否包含返回布尔值更贴切。

    当然,some方法同样能结合Object.is()方法检测NaN。some也是较为推荐的方法

    [NaN].some(ele => Object.is(NaN, ele));
  • includes()方法
  • ES6新增的数组方法,用于检测数组是否包含某个元素,如果包含返回true,否则返回false,比较厉害的是,能直接检测NaN:

    [1, 3, 'echo'].includes('echo'); //true
    [NaN, 3, 'echo'].includes(NaN); //true
    [1, 3, 'echo'].includes('听风是风'); //false

    优点就不用说了,最简单的做法没有之一,不用回调,不用复杂的写法,一个方法直接搞定。

    缺点是低版本浏览器支持不是很友好,当然能用我们还是用,不能用我们就自己封装:

    let hasEle = (() =>
    Array.prototype.includes ?
    (arr, val) => arr.includes(val) :
    (arr, val) => arr.some(ele => Object.is(val, ele))
    )();

    hasEle([1, 2, NaN], 1) //true
    hasEle([1, 2, NaN], NaN) //true
    hasEle([1, 2, NaN], '听风是风') //false


    网友评论