JavaScript中的数组——搜索数组的方法

92 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 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 搜索不到,所以 indexOflastIndexOf 方法返回 -1includes 方法返回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