Array.prototype.find()
find() 方法是 Array 例項上的一種方法,它返回陣列中滿足測試函式 callbackFn 的第一個元素。如果陣列中沒有滿足該函式的值,則返回 undefined。
- 如果你需要找到找到元素的索引,請使用
findIndex()。 - 如果你需要查詢某個值的索引,請使用
indexOf()。(它與findIndex()類似,但它透過與值進行相等性比較來檢查每個元素,而不是使用測試函式。) - 如果你需要檢查陣列中是否存在某個值,請使用
includes()。同樣,它透過與值進行相等性比較來檢查每個元素,而不是使用測試函式。 - 如果你需要檢查陣列中是否任意一個元素滿足測試函式,請使用
some()。 - 如果你需要找到陣列中所有滿足測試函式的元素,請使用
filter()。
試一試
const array = [5, 12, 8, 130, 44];
const found = array.find((element) => element > 10);
console.log(found);
// Expected output: 12
語法
js
find(callbackFn)
find(callbackFn, thisArg)
引數
callbackFnthisArg可選-
在執行
callbackFn時用作this的值。請參閱 迭代方法。
返回值
陣列中第一個滿足測試函式的元素。否則,返回 undefined。
描述
find() 方法是一種迭代方法。它會按升序為陣列中的每個元素呼叫一次提供的 callbackFn 函式,直到 callbackFn 返回一個真值。然後,find() 返回該元素並停止迭代陣列。如果 callbackFn 從未返回真值,則 find() 返回 undefined。有關這些方法的一般工作原理,請閱讀迭代方法部分。
callbackFn 會為陣列的每一個索引呼叫,而不僅僅是那些有賦值的索引。對於稀疏陣列中的空槽,其行為與 undefined 相同。
find() 方法是通用的。它只期望 this 值具有 length 屬性和整數鍵屬性。
示例
透過屬性查詢陣列中的物件
js
const inventory = [
{ name: "apples", quantity: 2 },
{ name: "bananas", quantity: 0 },
{ name: "cherries", quantity: 5 },
];
function isCherries(fruit) {
return fruit.name === "cherries";
}
console.log(inventory.find(isCherries));
// { name: 'cherries', quantity: 5 }
使用箭頭函式和解構賦值
js
const inventory = [
{ name: "apples", quantity: 2 },
{ name: "bananas", quantity: 0 },
{ name: "cherries", quantity: 5 },
];
const result = inventory.find(({ name }) => name === "cherries");
console.log(result); // { name: 'cherries', quantity: 5 }
查詢陣列中的第一個質數
下面的示例返回陣列中的第一個質數,如果不存在質數,則返回 undefined。
js
function isPrime(n) {
if (n < 2) {
return false;
}
if (n % 2 === 0) {
return n === 2;
}
for (let factor = 3; factor * factor <= n; factor += 2) {
if (n % factor === 0) {
return false;
}
}
return true;
}
console.log([4, 6, 8, 12].find(isPrime)); // undefined, not found
console.log([4, 5, 8, 12].find(isPrime)); // 5
注意:isPrime() 實現僅用於演示。對於實際應用,您需要使用高度記憶化的演算法,例如埃拉託斯特尼篩法,以避免重複計算。
使用 callbackFn 的第三個引數
當你想訪問陣列中的另一個元素時,array 引數很有用,尤其是在你沒有引用該陣列的現有變數時。下面的示例首先使用 filter() 提取正值,然後使用 find() 查詢小於其相鄰元素的第一個元素。
js
const numbers = [3, -1, 1, 4, 1, 5, 9, 2, 6];
const firstTrough = numbers
.filter((num) => num > 0)
.find((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
在稀疏陣列上使用 find()
稀疏陣列中的空槽會被訪問,並被視為 undefined。
js
// Declare array with no elements at indexes 2, 3, and 4
const array = [0, 1, , , , 5, 6];
// Shows all indexes, not just those with assigned values
array.find((value, index) => {
console.log("Visited index", index, "with value", value);
return false;
});
// Visited index 0 with value 0
// Visited index 1 with value 1
// Visited index 2 with value undefined
// Visited index 3 with value undefined
// Visited index 4 with value undefined
// Visited index 5 with value 5
// Visited index 6 with value 6
// Shows all indexes, including deleted
array.find((value, index) => {
// Delete element 5 on first iteration
if (index === 0) {
console.log("Deleting array[5] with value", array[5]);
delete array[5];
}
// Element 5 is still visited even though deleted
console.log("Visited index", index, "with value", value);
return false;
});
// Deleting array[5] with value 5
// Visited index 0 with value 0
// Visited index 1 with value 1
// Visited index 2 with value undefined
// Visited index 3 with value undefined
// Visited index 4 with value undefined
// Visited index 5 with value undefined
// Visited index 6 with value 6
在非陣列物件上呼叫 find()
find() 方法讀取 this 的 length 屬性,然後訪問鍵為小於 length 的非負整數的每個屬性。
js
const arrayLike = {
length: 3,
"-1": 0.1, // ignored by find() since -1 < 0
0: 2,
1: 7.3,
2: 4,
};
console.log(Array.prototype.find.call(arrayLike, (x) => !Number.isInteger(x)));
// 7.3
規範
| 規範 |
|---|
| ECMAScript® 2026 語言規範 # sec-array.prototype.find |
瀏覽器相容性
載入中…
另見
core-js中Array.prototype.find的 Polyfilles-shims中Array.prototype.find的 Polyfill- 索引集合指南
ArrayArray.prototype.findIndex()Array.prototype.findLast()Array.prototype.findLastIndex()Array.prototype.includes()Array.prototype.filter()Array.prototype.every()Array.prototype.some()TypedArray.prototype.find()