ES6 (ES2015)
参数
- callbackFn 回调函数
- item 元素
- index 下标
- arr 原数组
- thisArg 回调函数this指向
- 非严格模式默认为window ```javascript const arr = [1,2,3,4,5];
// 返回第一个满足条件的数组对应的元素下标 const idx = arr.findIndex(item => item > 2); // 2 const item = arr.find(item=> item > 2); // 3
// 没有找到符合条件的元素 返回 -1 const idx = arr.findIndex(item => item > 5); // -1
// 数组长度为空的情况返回-1 const idx = [].findIndex(item => item > 2); // -1
<a name="7b4tM"></a>
# 对于稀疏数组
```javascript
[,2,,,,,,].findIndex(item => item === 2); // 1
[,2,,,,,,].findIndex(item => {
console.log(item);
return item === 2;
});
/*
undefined
2
*/
- 稀疏数组是正常遍历空隙
- ES5的遍历方法只会遍历有值的索引项
- 与find同理
- 空隙将会被填充为undefined
- findIndex如果回调返回true, 遍历就停止
行为表现
回调函数内部是无法改变元素值
可以增加元素,但遍历只会在源数组的length,行为与find相似
语雀内容
polyfill
也是与find相同,只是返回的值为索引值。
Array.prototype.myFindIndex = function (cb) {
if(this === null){
throw new TypeError(`"this" is null`);
}
if(typeof cb !== 'function'){
throw new TypeError('Callback must be a function type');
}
var obj = Object(this),
len = obj.length >>> 0,
arg2 = arguments[1],
step = 0;
while(step<len){
var value = obj[step];
if(cb.apply(arg2, [value, step, obj])){
return step;
}
step ++;
}
return -1;
}