# 判断数组中是否包含某个值

# indexof()

如果存在,则返回数组元素的下标,否则返回-1。
参数:item为查找的值,start为开始位置,lastIndexOf()则是从末尾开始查找。

var arr = [1,2,3,4];
var index = arr.indexOf(3);
console.log(index);

# includes()

Array.prototype.includes方法返回一个布尔值,如果存在返回true,否则返回false,与字符串的includes方法类似。
该方法的第二个参数表示搜索的起始位置,默认为0。如果第二个参数为负数,则表示倒数的位置,如果这时它大于数组长度(比如第二个参数为-4,但数组长度为3),则会重置为从0开始。

[1, 2, 3].includes(2)     // true
[1, 2, 3].includes(4)     // false
[1, 2, NaN].includes(NaN) // true

[1, 2, 3].includes(3, 3);  // false
[1, 2, 3].includes(3, -1); // true

# find()

返回数组中满足条件的第一个元素的值,如果没有,返回undefined

let a = [1, 2, 3, 4, 5, 6, 7, 8, 9];
a.find(n => n > 5) // 6
a.find(function(value, index, arr) {
  return value > 9;
}) // undefined

# findIndex()

返回数组中满足条件的第一个元素的下标,如果没有找到,返回-1]

[1, 5, 10, 15].findIndex(function(value, index, arr) {
  return value > 9;
}) // 2

// 这两个方法都可以接受第二个参数,用来绑定回调函数的this对象。
function f(v){
  return v > this.age;
}
let person = {name: 'John', age: 20};
[10, 12, 26, 15].find(f, person);    // 26

上面的代码中,find函数接收了第二个参数person对象,回调函数中的this对象指向person对象。