Array.prototype.find()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since â¨2015å¹´9æâ©.
Array 實ä¾ç find() æ¹æ³æåå³å¨æä¾çé£åä¸ç¬¬ä¸åé鿿便¸¬è©¦å½å¼çå
ç´ ãå¦ææ²æä»»ä½å¼é鿏¬è©¦å½å¼ï¼ååå³ undefinedã
- å¦æä½ éè¦åå¾è©²å
ç´ å¨é£åä¸çç´¢å¼ï¼è«ä½¿ç¨
findIndex()ã - å¦æä½ éè¦æ¾åºæåç¹å®å¼çç´¢å¼ï¼è«ä½¿ç¨
indexOf()ãï¼éèfindIndex()é¡ä¼¼ï¼ä½å®æ¯ééå¼çç¸çæ§ä¾æª¢æ¥æ¯åå ç´ ï¼èéä½¿ç¨æ¸¬è©¦å½å¼ãï¼ - å¦æä½ æ³ç¥éæå弿¯å¦å卿¼é£åä¸ï¼è«ä½¿ç¨
includes()ãå®å樣æ¯ééå¼çç¸çæ§ä¾æª¢æ¥æ¯åå ç´ ï¼èéä½¿ç¨æ¸¬è©¦å½å¼ã - å¦æä½ æ³ç¥éé£å䏿¯å¦æä»»ä¸å
ç´ ééææä¾ç測試å½å¼ï¼è«ä½¿ç¨
some()ã - å¦æä½ æ³å徿æé鿏¬è©¦å½å¼çå
ç´ ï¼è«ä½¿ç¨
filter()ã
å試ä¸ä¸
const array1 = [5, 12, 8, 130, 44];
const found = array1.find((element) => element > 10);
console.log(found);
// é æè¼¸åºï¼12
èªæ³
find(callbackFn)
find(callbackFn, thisArg)
忏
callbackFn-
æå°é£åä¸çæ¯åå ç´ å·è¡çå½å¼ãæ¤å½å¼æåå³çå¼ä»¥æåºæ¾å°ç¬¦åæ¢ä»¶çå ç´ ï¼å¦åæåå³åå¼ãæ¤å½å¼è¢«å¼å«æå¯ä»¥å³å ¥ä»¥ä¸å¼æ¸ï¼
thisArg鏿æ§-
å·è¡
callbackFnæç¨ä½thisçå¼ãè«åè¦è¿ä»£æ¹æ³ã
åå³å¼
åå³ç¬¬ä¸åé鿏¬è©¦å½å¼çé£åå
ç´ ãå¦ååå³ undefinedã
æè¿°
find() æ¹æ³æ¯ä¸åè¿ä»£æ¹æ³ãå®æä»¥ç´¢å¼éå¢é åºå°é£åä¸çæ¯åå
ç´ å·è¡ä¸æ¬¡ææä¾ç callbackFn å½å¼ï¼ç´å° callbackFn åå³ä¸åçå¼ãæ¤æï¼find() æåå³è©²å
ç´ ä¸¦åæ¢è¿ä»£é£åãè¥ callbackFn æªæ¾åå³çå¼ï¼å find() æåå³ undefinedãè«åé±è¿ä»£æ¹æ³é¨å以深å
¥äºè§£éäºæ¹æ³çé使¹å¼ã
callbackFn æéå°é£å䏿¯åç´¢å¼å·è¡ä¸æ¬¡ï¼ä¸å
éæ¼å·²è¢«è³¦å¼çç´¢å¼ãç¨çé£åä¸ç空槽æè¦çº undefinedï¼è¡çºå°æç¸åã
find() æ¹æ³æ¯éç¨çãå®åªè¦æ± this å
·æ length 屬æ§ä»¥åæ´æ¸éµå±¬æ§å³å¯ã
ç¯ä¾
>ä¾ç©ä»¶å±¬æ§æ¾åºé£åä¸çæåç©ä»¶
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 }
使ç¨ç®é å½å¼èè§£æ§èªæ³
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ã
function isPrime(element, index, array) {
let start = 2;
while (start <= Math.sqrt(element)) {
if (element % start++ < 1) {
return false;
}
}
return element > 1;
}
console.log([4, 6, 8, 12].find(isPrime)); // undefinedï¼æªæ¾å°
console.log([4, 5, 8, 12].find(isPrime)); // 5
ä½¿ç¨ callbackFn ç第ä¸å弿¸
array 弿¸å¨ä½ æ²æå¦å¤çè®æ¸åç
§é£åæç¹å¥æç¨ï¼è½è®ä½ ååé£åä¸å
¶ä»çå
ç´ ã以ä¸ä¾åä¸ï¼æåå
ç¨ filter() ååºæææ£æ¸ï¼åç¨ find() æ¾åºç¬¬ä¸åæ¯å
¶ç¸é°æ¸å¼é½å°çæ¸åã
const numbers = [3, -1, 1, 4, 1, 5, 9, 2, 6];
const firstTrough = numbers
.filter((num) => num > 0)
.find((num, idx, arr) => {
// è¥æ²æ arr 弿¸ï¼å°±ç¡æ³ååéåä¸ä»é£åï¼é¤éå
å²åæè®æ¸ã
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 ç¸åã
// 宣åå¨ç´¢å¼ 2ã3ã4 èç¡å
ç´ çé£å
const array = [0, 1, , , , 5, 6];
// 顯示ææç´¢å¼ï¼å
æ¬æªè³¦å¼ç
array.find((value, index) => {
console.log("訪åç´¢å¼", index, "ï¼å¼çº", value);
return false;
});
// 訪åç´¢å¼ 0 ï¼å¼çº 0
// 訪åç´¢å¼ 1 ï¼å¼çº 1
// 訪åç´¢å¼ 2 ï¼å¼çº undefined
// 訪åç´¢å¼ 3 ï¼å¼çº undefined
// 訪åç´¢å¼ 4 ï¼å¼çº undefined
// 訪åç´¢å¼ 5 ï¼å¼çº 5
// 訪åç´¢å¼ 6 ï¼å¼çº 6
// 顯示ææç´¢å¼ï¼å
æ¬è¢«åªé¤çå
ç´
array.find((value, index) => {
// å¨ç¬¬ä¸æ¬¡è¿ä»£æåªé¤å
ç´ 5
if (index === 0) {
console.log("åªé¤ array[5]ï¼å¼çº", array[5]);
delete array[5];
}
// å³ä½¿å·²åªé¤ï¼ç´¢å¼ 5 ä»æè¢«è¨ªå
console.log("訪åç´¢å¼", index, "ï¼å¼çº", value);
return false;
});
// åªé¤ array[5]ï¼å¼çº 5
// 訪åç´¢å¼ 0 ï¼å¼çº 0
// 訪åç´¢å¼ 1 ï¼å¼çº 1
// 訪åç´¢å¼ 2 ï¼å¼çº undefined
// 訪åç´¢å¼ 3 ï¼å¼çº undefined
// 訪åç´¢å¼ 4 ï¼å¼çº undefined
// 訪åç´¢å¼ 5 ï¼å¼çº undefined
// 訪åç´¢å¼ 6 ï¼å¼çº 6
å°éé£åç©ä»¶å¼å« find()
find() æ¹æ³æè®å this ç length 屬æ§ï¼ç¶å¾ä¾æéè² æ´æ¸ç´¢å¼åå尿屬æ§ã
const arrayLike = {
length: 3,
"-1": 0.1, // å çº -1 < 0ï¼find() æå¿½ç¥
0: 2,
1: 7.3,
2: 4,
};
console.log(Array.prototype.find.call(arrayLike, (x) => !Number.isInteger(x)));
// 7.3
è¦ç¯
| Specification |
|---|
| ECMAScript® 2026 Language Specification > # sec-array.prototype.find > |
ç覽å¨ç¸å®¹æ§
åè¦
- å¨
core-jsä¸Array.prototype.findç polyfill Array.prototype.findç es-shims 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()