方式一 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吗?(∘⁼̴⃙̀˘︷˘⁼̴⃙́∘)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。