# indexOf
# Description
使用 SameValueZero 等值比较,返回首次 value 在数组 array 中被找到的 索引值, 如果 fromIndex 为负值,将从数组 array 尾端索引进行匹配。
# Params
(array, value, fromIndex)
# Return
Number
# Depend
import baseIndexOf from './.internal/baseIndexOf.js'
import toInteger from './toInteger.js'
# Code
function indexOf(array, value, fromIndex) {
const length = array == null ? 0 : array.length
if (!length) {
return -1
}
let index = fromIndex == null ? 0 : toInteger(fromIndex)
if (index < 0) {
index = Math.max(length + index, 0)
}
return baseIndexOf(array, value, index)
}
# Analyze
拿到 array 的 length 属性,然后进行了判断
如果
length
为假值,则返回 -1对于
index
进行了处理,如果 没有 传入fromIndex
,则index
为 0,否则使用toInteger
将其转为整数后赋值给 index如果
index < 0
,则表示从后往前数,从数到的位置开始,这里就是使用length + index
的方法,来确定index
的值,但是length + index
的值不能小于 0, 所以使用Math.max
取 0 和length + index
中较大值最后会调用
baseIndexOf
方法进行查找
# Remark
- Array.prototype.indexOf() MDN (opens new window) 方法返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回 - 1。
# Example
console.log(indexOf([1,2,3,4,5], 3)) //2