ECMAScript 提供两类搜索数组的方法:按严格相等搜索和按断言函数搜索。

1. 严格相等:

ECMAScript 提供了 3 个严格相等的搜索方法:indexOf()、lastIndexOf()和 includes()。其 中,前两个方法在所有版本中都可用,而第三个方法是 ECMAScript 7 新增的。这些方法都接收两个参 数:要查找的元素和一个可选的起始搜索位置。indexOf()和 includes()方法从数组前头(第一项) 开始向后搜索,而 lastIndexOf()从数组末尾(最后一项)开始向前搜索。

indexOf()和 lastIndexOf()都返回要查找的元素在数组中的位置,如果没找到则返回1。 includes()返回布尔值,表示是否至少找到一个与指定元素匹配的项。在比较第一个参数跟数组每一 项时,会使用全等(===)比较,也就是说两项必须严格相等。下面来看一些例子:

let numbers = [1, 2, 3, 4, 5, 4, 3, 2, 1];
    alert(numbers.indexOf(4));
    alert(numbers.lastIndexOf(4));
    alert(numbers.includes(4));
    alert(numbers.indexOf(4, 4));
    alert(numbers.lastIndexOf(4, 4));
    alert(numbers.includes(4, 7));
    let person = { name: "Nicholas" };
    let people = [{ name: "Nicholas" }];
    let morePeople = [person];
    alert(people.indexOf(person));
    alert(morePeople.indexOf(person));  // 0
    alert(people.includes(person));     // false
    alert(morePeople.includes(person)); // true

2. 断言函数:

ECMAScript 也允许按照定义的断言函数搜索数组,每个索引都会调用这个函数。断言函数的返回 值决定了相应索引的元素是否被认为匹配

断言函数接收 3 个参数:元素、索引和数组本身。其中元素是数组中当前搜索的元素,索引是当前 元素的索引,而数组就是正在搜索的数组。断言函数返回真值,表示是否匹配。

find()和 findIndex()方法使用了断言函数。这两个方法都从数组的最小索引开始。find()返回 第一个匹配的元素,findIndex()返回第一个匹配元素的索引。这两个方法也都接收第二个可选的参数, 用于指定断言函数内部 this 的值。

const people = [
      {
        name: "Matt",
age: 27 },
      {
        name: "Nicholas",
        age: 29
} ];
alert(people.find((element, index, array) => element.age < 28)); // {name: "Matt", age: 27}
alert(people.findIndex((element, index, array) => element.age < 28)); // 0