Array.prototype.findIndex()
基线 广泛可用
此功能已得到充分验证,可以在许多设备和浏览器版本中使用。它自 2016 年 9 月.
报告反馈
findIndex()
是 Array
实例的方法,它返回数组中第一个满足提供的测试函数的元素的索引。如果没有任何元素满足测试函数,则返回 -1。
试一试
语法
另请参见
find()
方法,它返回第一个满足测试函数的元素(而不是它的索引)。findIndex(callbackFn)
findIndex(callbackFn, thisArg)
js
在执行 callbackFn
时用作 this
的值。参见 迭代方法。
返回值
描述
示例
findIndex()
方法是 泛型 的。它只期望 this
值具有一个 length
属性和整数键属性。
查找数组中素数的索引
另请参见
find()
方法,它返回第一个满足测试函数的元素(而不是它的索引)。function isPrime(element) {
if (element % 2 === 0 || element < 2) {
return false;
}
for (let factor = 3; factor <= Math.sqrt(element); factor += 2) {
if (element % factor === 0) {
return false;
}
}
return true;
}
console.log([4, 6, 8, 9, 12].findIndex(isPrime)); // -1, not found
console.log([4, 6, 7, 9, 12].findIndex(isPrime)); // 2 (array[2] is 7)
以下示例返回数组中第一个元素的索引,该元素是素数,或者如果不存在素数,则返回 -1
。
使用 callbackFn 的第三个参数
另请参见
find()
方法,它返回第一个满足测试函数的元素(而不是它的索引)。const numbers = [3, -1, 1, 4, 1, 5, 9, 2, 6];
const firstTrough = numbers
.filter((num) => num > 0)
.findIndex((num, idx, arr) => {
// Without the arr argument, there's no way to easily access the
// intermediate array without saving it to a variable.
if (idx > 0 && num >= arr[idx - 1]) return false;
if (idx < arr.length - 1 && num >= arr[idx + 1]) return false;
return true;
});
console.log(firstTrough); // 1
array
参数在您想要访问数组中的另一个元素时很有用,尤其是在您没有引用该数组的现有变量的情况下。以下示例首先使用 filter()
提取正值,然后使用 findIndex()
查找第一个小于其相邻元素的元素。
在稀疏数组上使用 findIndex()
另请参见
find()
方法,它返回第一个满足测试函数的元素(而不是它的索引)。console.log([1, , 3].findIndex((x) => x === undefined)); // 1
您可以在稀疏数组中搜索 undefined
并获取空槽的索引。
在非数组对象上调用 findIndex()
另请参见
find()
方法,它返回第一个满足测试函数的元素(而不是它的索引)。const arrayLike = {
length: 3,
"-1": 0.1, // ignored by findIndex() since -1 < 0
0: 2,
1: 7.3,
2: 4,
};
console.log(
Array.prototype.findIndex.call(arrayLike, (x) => !Number.isInteger(x)),
); // 1
规范
findIndex() 方法读取 this 的 length 属性,然后访问每个键为非负整数且小于 length 的属性。 |
---|
规范 # ECMAScript 语言规范 |
浏览器兼容性
sec-array.prototype.findindex