# baseFindIndex
# Description
baseFindIndex
是lodash内部方法,其作用类似于 ES6
的 findIndex
,查找符合条件的第一个元素的索引。
baseFindIndex
除了从左到右查找外,还可以从右到左查找。
# Params
(array, predicate, fromIndex, fromRight)
{Function} predicate - 每次迭代调用的函数
{number} fromIndex - 从指定下标开始查找
{boolean} [fromRight] - 是否从右到左
# Return
Number
# Code
function baseFindIndex(array, predicate, fromIndex, fromRight) {
const { length } = array
let index = fromIndex + (fromRight ? 1 : -1)
while ((fromRight ? index-- : ++index < length)) {
if (predicate(array[index], index, array)) {
return index
}
}
return -1
}
# Analyze
- 首先拿到
array.length
, 定义index
为传入的指定位置加上1
或者-1
,根据 是否从右到左来判断 +1
或者 +-1
while
循环遍历 ,如果是从右到左,结束条件为index--
(递减), 否则结束条件为++index < length
(递增)- 如果传入
predicate
处理数据结果为true
,则返回当前index
,predicate
接受三个参数,当前值, 当前下标,完整数组 - 如果整个循环完成后,都没有找到符合的值,则返回
-1
# Remark
- Array.prototype.findIndex() MDN (opens new window) 方法返回数组中满足提供的测试函数的第一个元素的索引。若没有找到对应元素则返回 - 1。
- while 三目判断那里 ,因为 < 的运算符优先级高于 三目 ,所以 无需加括号增加运算符等级
- 运算符优先级 MDN (opens new window)
# Example
const a = [1,2,3,4,5,6]
baseFindIndex(a, (val) => val > 3, 0) // 3
baseFindIndex(a, (val) => val > 3, a.length, true) // 5