1.indexOf 的用法
indexOf() 方法可返回数组中某个指定的元素位置。
该方法将从头到尾地检索数组,看它是否含有对应的元素。开始检索的位置在数组 start 处或数组的开头(没有指定 start 参数时)。如果找到一个 item,则返回 item 的第一次出现的位置。开始位置的索引为 0。
如果在数组中没找到指定元素则返回 -1。
lastIndexOf 从后向前查找, 即返回最后一次出现的下标
indexOf 有两个参数,第一个参数是要查询的元素,第二个参数是开始查询位置的下标 start。
当 start 不传入时,start 默认为 0,
当 start 负值时,判断 arr.length+start,如果相加后小于 0,则从 0 开始,
如果大于 0,则从 arr.length+start 开始,即从倒数 |start| 位置开始
indexOf 不能判断 NaN,includes 可以判断 NaN
2.indexOf 使用示例
const arr = [1, 2, 3, 3, 4, 5]
console.log(arr.indexOf(3));// 2
console.log(arr.indexOf(3, -2));// 从倒数第二个元素开始查找 -1
console.log(arr.indexOf(3, 3));// 从下标 3 出开始查找 3
3.indexOf 实现
Array.prototype.myIndexOf = function (param,start=0) {// 如果 start 大于等于数组长度,此时 this[start] 越界,返回 -1
if (start >= this.length) return -1
// 如果 start 小于 0,判断 start + this.length
if (start < 0) {start = start + this.length < 0 ? 0 : start + this.length;}
//start 处理完毕,开始从 start 处遍历数组,查找元素下标
for (let i = 0; i < this.length; i++) {if (this[i] === param) return i;
}
// 遍历完毕没有找到相应元素,返回 -1
return -1
}
4.includes 用法
includes 与 indexOf 的不同有两点:
1.includes 返回的是 boolean,如果查找到元素,返回 true,否则返回 false
2.includes 可以判断数组中是否存在 NaN
5.includes 的实现
Array.prototype.myIncludes = function (param, start = 0) {if (start >= this.length) return false
if (start < 0) {start = start + this.length < 0 ? 0 : start + this.length;}
//start 处理完毕后,判断要查找的元素是不是 NaN,
if (Number.isNaN(param)) {
//param 是 NaN,从 start 处开始逐个判断数组中的元素是不是 NaN,如果是,返回 true
for (let i = start; i < this.length; i++) {if (Number.isNaN(this[i])) return true;
}
} else {
//param 不是 NaN,使用 === 比较即可
for (let i = start; i < this.length; i++) {if (this[i] === param) return true;
}
}
return false
}