4

方式一 includes方法

let arr = ['甲', '乙', '丙', '丁']

console.log(arr.includes('甲')) // true
console.log(arr.includes('戊')) // false

方式二 indexOf方法

let arr = ['甲', '乙', '丙', '丁']

console.log(arr.indexOf('甲')) // 0 (有就返回索引0~n)
console.log(arr.indexOf('戊')) // -1 (没有就返回-1)

方式三 findIndex方法

let arr = ['甲', '乙', '丙', '丁']

let flag1 = arr.findIndex((item) => {
    return item == '甲'
})
console.log(flag1) // 0 (有就返回索引0~n)

let flag2 = arr.findIndex((item) => {
    return item == '戊'
})
console.log(flag2) // -1 (没有就返回-1)

方式四 some方法

let arr = ['甲', '乙', '丙', '丁']

let flag3 = arr.some((item) => { // 只要有一个存在就返回true
    return item == '甲'
})
console.log(flag3) // true

let flag4 = arr.some((item) => { // 一个都不存在才返回false
    return item == '戊'
})
console.log(flag4) // false

方式五 定义标识加常见的循环

// 定义标识搭配循环for、forEach...

let arr = ['甲', '乙', '丙', '丁']

let flag5 = false // 默认不存在
arr.forEach((item) => {
    if (item == '甲') { // 戊
        flag5 = true
    }
})
console.log(flag5) // true // false

注意

简单数组使用includes或indexOf

类似这种简单的数组,数组中只有单一项,内部存储的字符串或者数字之类的,
使用includes或indexOf方便一些
arr = [1,2,3,4,5]
arr2 = ['发财','白皮','红中']

复杂些的数组使用另外几个

如带层级的数组,数组中对象或更多层级的结构,这个时候需要使用带回调函数的方法,
此时再去使用includes或indexOf就不够用了
arr3 = [
            {
                    name: '孙悟空',
                    age: 500
            },
            {
                    name: '猪八戒',
                    age: 88
            },
            {
                    name: '沙和尚',
                    age: 1000
            },
        ]

面试题:includes和indexOf的最大区别 😂

最大的区别就是

  • indexOf是 ===
  • includes是 ==

indexOf要求严格,无法正确判断数组中是否有NaN
但是includes可以

let arr = [NaN, 1, undefined]
console.log(arr.includes(NaN)) // true
console.log(arr.indexOf(NaN)) // -1
// undefined不受影响
console.log(arr.includes(undefined)) // true
console.log(arr.indexOf(undefined)) // 2
内心想法:面试官你平常开发业务,定义一个数组,里面专门存放NaN吗?(∘⁼̴⃙̀˘︷˘⁼̴⃙́∘)

水冗水孚
1.1k 声望585 粉丝

每一个不曾起舞的日子,都是对生命的辜负