Array.prototype.lastIndexOf()
åºçº¿
广æ³å¯ç¨
èª 2015å¹´7æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
lastIndexOf() æ¹æ³è¿åæ°ç»ä¸ç»å®å
ç´ æå䏿¬¡åºç°çç´¢å¼ï¼å¦æä¸åå¨åè¿å -1ãè¯¥æ¹æ³ä» fromIndex å¼å§ååæç´¢æ°ç»ã
å°è¯ä¸ä¸
const animals = ["Dodo", "Tiger", "Penguin", "Dodo"];
console.log(animals.lastIndexOf("Dodo"));
// Expected output: 3
console.log(animals.lastIndexOf("Tiger"));
// Expected output: 1
è¯æ³
lastIndexOf(searchElement)
lastIndexOf(searchElement, fromIndex)
åæ°
searchElement-
è¢«æ¥æ¾çå ç´ ã
fromIndexå¯é-
以 0 èµ·å§çç´¢å¼ï¼è¡¨æååæç´¢çèµ·å§ä½ç½®ï¼ä¼è¢«è½¬æ¢ä¸ºæ´æ°ã
- 妿
fromIndex < 0ï¼å仿°ç»æ«å°¾å¼å§åæ°è®¡æ°ââå³ä½¿ç¨fromIndex + array.lengthçå¼ã - 妿
fromIndex < -array.lengthï¼åä¸æç´¢æ°ç»å¹¶è¿å-1ã仿¦å¿µä¸è®²ï¼ä½ å¯ä»¥æå®æ³è±¡æä»æ°ç»å¼å§ä¹åä¸åå¨çä½ç½®å¼å§ååæç´¢ï¼è¿æ¡è·¯å¾ä¸æ²¡æä»»ä½æ°ç»å ç´ ï¼å æ¤searchElementæ°¸è¿ä¸ä¼è¢«æ¾å°ã - 妿
fromIndex >= array.lengthæè çç¥äºfromIndexï¼å使ç¨array.length - 1ï¼è¿ä¼å¯¼è´æç´¢æ´ä¸ªæ°ç»ãå¯ä»¥å°å ¶çè§£ä¸ºä»æ°ç»å°¾é¨ä¹åä¸åå¨çä½ç½®å¼å§ååæç´¢ãæç»ä¼è®¿é®å°æ°ç»æåä¸ä¸ªå ç´ ï¼å¹¶ç»§ç»ååå¼å§å®é æç´¢æ°ç»å ç´ ã
- 妿
è¿åå¼
æ°ç»ä¸è¯¥å ç´ æå䏿¬¡åºç°çç´¢å¼ï¼å¦æªæ¾å°è¿å -1ã
æè¿°
lastIndexOf 使ç¨ä¸¥æ ¼ç¸çï¼ä¸ === è¿ç®ç¬¦ä½¿ç¨çç®æ³ç¸åï¼æ¯è¾ searchElement åæ°ç»ä¸çå
ç´ ãNaN 弿°¸è¿ä¸ä¼è¢«æ¯è¾ä¸ºç¸çï¼å æ¤å½ searchElement 为 NaN æ¶ lastIndexOf() æ»æ¯è¿å -1ã
lastIndexOf() æ¹æ³ä¼è·³è¿ç¨çæ°ç»ä¸ç空槽ã
lastIndexOf() æ¹æ³æ¯éç¨çãå®åªææ this å¼å
·æ length 屿§åæ´æ°é®å±æ§ã
示ä¾
>ä½¿ç¨ lastIndexOf()
ä¸ä¾ä½¿ç¨ lastIndexOf() å®ä½æ°ç»ä¸çå¼ã
const numbers = [2, 5, 9, 2];
numbers.lastIndexOf(2); // 3
numbers.lastIndexOf(7); // -1
numbers.lastIndexOf(2, 3); // 3
numbers.lastIndexOf(2, 2); // 0
numbers.lastIndexOf(2, -2); // 0
numbers.lastIndexOf(2, -1); // 3
ä½ ä¸è½ç¨ lastIndexOf() æ¥æç´¢ NaNã
const array = [NaN];
array.lastIndexOf(NaN); // -1
æ¥æ¾å ç´ åºç°çææç´¢å¼
ä¸ä¾ä½¿ç¨ lastIndexOf æ¥æ¾å°ä¸ä¸ªå
ç´ å¨æ°ç»ä¸ææçç´¢å¼ï¼ä¸æ ï¼ï¼å¹¶å¨æ¾å°å®ä»¬æ¶ç¨ push å°å®ä»¬æ·»å å°å¦ä¸ä¸ªæ°ç»ä¸ã
const indices = [];
const array = ["a", "b", "a", "c", "a", "d"];
const element = "a";
let idx = array.lastIndexOf(element);
while (idx !== -1) {
indices.push(idx);
idx = idx > 0 ? array.lastIndexOf(element, idx - 1) : -1;
}
console.log(indices);
// [4, 2, 0]
éè¦æ³¨æçæ¯ï¼è¿éå¿
é¡»åç¬å¤ç idx === 0 çæ
åµï¼å ä¸ºå¦æè¯¥å
ç´ æ¯æ°ç»ç第ä¸ä¸ªå
ç´ ï¼åæ 论 fromIndex åæ°çå¼ä¸ºä½ï¼å®æ»æ¯ä¼è¢«æ¾å°ãè¿ä¸ indexOf æ¹æ³ä¸åã
å¨ç¨çæ°ç»ä¸ä½¿ç¨ lastIndexOf()
ä½ ä¸è½ä½¿ç¨ lastIndexOf() æ¥æç´¢ç¨çæ°ç»ä¸ç空槽ã
console.log([1, , 3].lastIndexOf(undefined)); // -1
å¨éæ°ç»å¯¹è±¡ä¸è°ç¨ lastIndexOf()
lastIndexOf() æ¹æ³è¯»å this ç length 屿§ï¼ç¶åè®¿é®æ¯ä¸ªæ´æ°ç´¢å¼ã
const arrayLike = {
length: 3,
0: 2,
1: 3,
2: 2,
};
console.log(Array.prototype.lastIndexOf.call(arrayLike, 2));
// 2
console.log(Array.prototype.lastIndexOf.call(arrayLike, 5));
// -1
è§è
| è§è |
|---|
| ECMAScript® 2027 Language Specification> # sec-array.prototype.lastindexof> |