Array.prototype.find()
åºçº¿
广æ³å¯ç¨
èª 2015å¹´9æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
find() æ¹æ³è¿åæ°ç»ä¸æ»¡è¶³æä¾çæµè¯å½æ°ç第ä¸ä¸ªå
ç´ çå¼ãå¦åè¿å undefinedã
- 妿éè¦å¨æ°ç»ä¸æ¾å°å¯¹åºå
ç´ çç´¢å¼ï¼è¯·ä½¿ç¨
findIndex()ã - 妿éè¦æ¥æ¾æä¸ªå¼çç´¢å¼ï¼è¯·ä½¿ç¨
Array.prototype.indexOf()ãï¼å®ç±»ä¼¼äºfindIndex()ï¼ä½åªæ¯æ£æ¥æ¯ä¸ªå ç´ æ¯å¦ä¸å¼ç¸çï¼è䏿¯ä½¿ç¨æµè¯å½æ°ãï¼ - 妿éè¦æ¥æ¾æ°ç»ä¸æ¯å¦åå¨æä¸ªå¼ï¼è¯·ä½¿ç¨
Array.prototype.includes()ãåæ ·ï¼å®æ£æ¥æ¯ä¸ªå ç´ æ¯å¦ä¸å¼ç¸çï¼è䏿¯ä½¿ç¨æµè¯å½æ°ã - 妿éè¦æ¥æ¾æ¯å¦æå
ç´ æ»¡è¶³ææä¾çæµè¯å½æ°ï¼è¯·ä½¿ç¨
Array.prototype.some()ã
å°è¯ä¸ä¸
const array1 = [5, 12, 8, 130, 44];
const found = array1.find((element) => element > 10);
console.log(found);
// Expected output: 12
è¯æ³
find(callbackFn)
find(callbackFn, thisArg)
åæ°
callbackFn-
为æ°ç»ä¸çæ¯ä¸ªå ç´ æ§è¡ç彿°ãå®åºè¯¥è¿åä¸ä¸ªç弿¥è¡¨ç¤ºå·²ç»æ¾å°äºå¹é çå ç´ ãè¯¥å½æ°è¢«è°ç¨æ¶å°ä¼ å ¥ä»¥ä¸åæ°ï¼
thisArgå¯é-
æ§è¡
callbackFnæ¶ç¨ä½thisçå¼ãåè§è¿ä»£æ¹æ³ã
è¿åå¼
æ°ç»ä¸ç¬¬ä¸ä¸ªæ»¡è¶³ææä¾æµè¯å½æ°çå
ç´ çå¼ï¼å¦åè¿å undefinedã
æè¿°
find() æ¹æ³æ¯ä¸ä¸ªè¿ä»£æ¹æ³ãå®æç´¢å¼ååºé¡ºåºä¸ºæ°ç»ä¸çæ¯ä¸ªå
ç´ è°ç¨æä¾ç callbackFn 彿°ï¼ç´å° callbackFn è¿åä¸ä¸ªçå¼ãç¶å find() è¿å该å
ç´ å¹¶åæ¢è¿ä»£æ°ç»ã妿 callbackFn 仿ªè¿åçå¼ï¼å find() è¿å undefinedã
callbackFn 被è°ç¨æ¥å¤çæ°ç»çæ¯ä¸ä¸ªç´¢å¼ï¼èä¸ä»
ä»
æ¯é£äºæå¼çç´¢å¼ãå¨ç¨çæ°ç»ä¸ï¼æªèµå¼çç©ºæ§½ä¸ undefined 表ç°ç¸åã
find() ä¸ä¼æ¹å被è°ç¨çæ°ç»ï¼ä½æ¯æä¾ç» callbackFn ç彿°å¯è½ä¼æ¹åå®ãä½éè¦æ³¨æçæ¯ï¼å¨ç¬¬ä¸æ¬¡è°ç¨ callbackFn ä¹åï¼æ°ç»çé¿åº¦ä¼è¢«ä¿åãå æ¤ï¼
- å½è°ç¨
find()æ¶ï¼callbackFnä¸ä¼è®¿é®è¶ åºæ°ç»åå§é¿åº¦çä»»ä½å ç´ ã - 对已ç»è®¿é®è¿çç´¢å¼çæ´æ¹ä¸ä¼å¯¼è´å次å¨è¿äºå
ç´ ä¸è°ç¨
callbackFnã - 妿
callbackFnæ¹åäºæ°ç»ä¸å·²åå¨ä½å°æªè¢«è®¿é®çå ç´ ï¼åä¼ éç»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(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ï¼æªæ¾å°
console.log([4, 5, 8, 12].find(isPrime)); // 5
夿³¨ï¼isPrime() å®ç°ä»
便¼ç¤ºãå¨å®é
åºç¨ä¸ï¼ä¸ºäºé¿å
éå¤è®¡ç®ï¼ä¼ä½¿ç¨å¤§éè®°å¿åçç®æ³ï¼ä¾å¦åæææ¯ç¹å°¼çæ³ã
å¨ç¨çæ°ç»ä¸ä½¿ç¨ find()
å¨ç¨çæ°ç»ä¸ï¼ç©ºæ§½ä¼è¢«è®¿é®çï¼å¹¶è¢«è§ä¸º undefinedã
// 声æä¸ä¸ªå¨ç´¢å¼ 2ã3 å 4 夿²¡æå
ç´ çæ°ç»
const array = [0, 1, , , , 5, 6];
// å°ä¼æå°ææç´¢å¼ï¼èä¸ä»
ä»
æ¯é£äºæå¼çé空槽
array.find((value, index) => {
console.log(`访é®ç´¢å¼ ${index}ï¼å¼ä¸º ${value}`);
});
// 访é®ç´¢å¼ 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}`);
});
// å é¤å¼ä¸º 5 ç array[5]
// 访é®ç´¢å¼ 0ï¼å¼ä¸º 0
// 访é®ç´¢å¼ 1ï¼å¼ä¸º 1
// 访é®ç´¢å¼ 2ï¼å¼ä¸º undefined
// 访é®ç´¢å¼ 3ï¼å¼ä¸º undefined
// 访é®ç´¢å¼ 4ï¼å¼ä¸º undefined
// 访é®ç´¢å¼ 5ï¼å¼ä¸º undefined
// 访é®ç´¢å¼ 6ï¼å¼ä¸º 6
å¨éæ°ç»å¯¹è±¡ä¸è°ç¨ find()
find() æ¹æ³è¯»å this ç length 屿§ï¼ç¶åè®¿é®æ¯ä¸ªæ´æ°ç´¢å¼ã
const arrayLike = {
length: 3,
0: 2,
1: 7.3,
2: 4,
};
console.log(Array.prototype.find.call(arrayLike, (x) => !Number.isInteger(x)));
// 7.3
è§è
| è§è |
|---|
| ECMAScript® 2027 Language Specification> # sec-array.prototype.find> |