携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第 4 天,点击查看活动详情
搜索和位置方法
ECMAScript 提供两类搜索数组的方法:按严格相等搜索和按断言函数搜索。
1、严格相等
ECMAScript 提供了 3 个严格相等的搜索方法:indexOf()、lastIndexOf()和 includes()。其中includes()是ES7新增的。
- 以上三个方法都接受两个参数:要查找的元素、可选的起始搜索位置
indexOf():从数组第一项向后查找,返回元素所在位置(索引),如果没找到则返回-1。lastIndexOf():从数组最后一项向前查找,返回元素所在位置(下标),如果没找到则返回-1。includes():从数组第一项向后查找,返回布尔值,表示是否至少找到一个与指定元素匹配的项。- 全等(===)比较
let arr1 = [1, '2', 3, 4, 5, 6, 7, 8];
console.log(arr1.indexOf(3)) // 2
console.log(arr1.indexOf(2)) // -1
console.log(arr1.lastIndexOf(3)) // 2
console.log(arr1.lastIndexOf(2)) // -1
console.log(arr1.includes(3)) // true
console.log(arr1.includes(2)) // false
上面代码中了,因为数组中的 2 是字符串类型,使用全等比较,校验值和类型必须都相等,数值类型的 2 搜索不到,所以 indexOf 和 lastIndexOf 方法返回 -1, includes 方法返回false。
2、断言函数
ECMAScript 也允许按照定义的断言函数搜索数组,每个索引都会调用这个函数。断言函数的返回值决定了相应索引的元素是否被认为匹配。
find()和findIndex()方法使用了断言函数- 这两个方法接收两个参数:函数和this值, 即 一个断言函数,一个断言函数内部this值
- 断言函数接收
3个参数:元素、索引和数组本身 - 断言函数返回真值,表示是否匹配
- 从数组最小索引开始,
find()返回 第一个匹配的元素,findIndex()返回第一个匹配元素的索引。 - 找到匹配项后,这两个方法都不再继续搜索。
let arr1 = [1, '2', 3, 4, 5, 6, 7, 8];
console.log(arr1.find((item,index,arr) => item > 2)) // 3
console.log(arr1.findIndex((item,index,arr) => item > 2)) // 2
console.log(arr1.find((item,index,arr) => item > 8)) // undefined
console.log(arr1.findIndex((item,index,arr) => item > 8)) // -1