Array.prototype.findLastIndex()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since 2022å¹´8æ.
findLastIndex() 㯠Array ã®ã¡ã½ããã§ããã®é
åãéé ã«å復å¦çããæå®ããããã¹ã颿°ãæºããé
åã®æå¾ã®è¦ç´ ã®ã¤ã³ããã¯ã¹ãè¿ãã¾ãã
ãã¹ã颿°ãæºããè¦ç´ ããªãã£ãå ´åã¯ã -1 ãè¿ãã¾ãã
findLast() ã¡ã½ãããåç
§ãã¦ãã ããããã¡ãã¯ãã¹ã颿°ãæºããæå¾ã®è¦ç´ ã®ï¼ä½ç½®ã§ã¯ãªãï¼å¤ãè¿ãã¾ãã
試ãã¦ã¿ã¾ããã
const array = [5, 12, 50, 130, 44];
const isLargeNumber = (element) => element > 45;
console.log(array.findLastIndex(isLargeNumber));
// äºæ³ãããçµæ: 3
// Index of element with value: 130
æ§æ
findLastIndex(callbackFn)
findLastIndex(callbackFn, thisArg)
弿°
callbackFn-
é åã®ããããã®è¦ç´ ã«å¯¾ãã¦å®è¡ãã颿°ã§ããä¸è´ããè¦ç´ ãå¾ããããã¨ã示ãã«ã¯çå¤ãè¿ããããã§ãªããã°å½å¤ãè¿ãã¦ãã ããããã®é¢æ°ã¯ä»¥ä¸ã®å¼æ°ã§å¼ã³åºããã¾ãã
thisArgçç¥å¯-
callbackFnå ã§thisã¨ãã¦ä½¿ããããªãã¸ã§ã¯ãã§ããå復å¦çã¡ã½ãããåç §ãã¦ãã ããã
è¿å¤
é
åå
ã§ããã¹ããæºãããæå¾ã®ï¼æã大ããªï¼è¦ç´ ã®ã¤ã³ããã¯ã¹ã
ãã以å¤ã®å ´åã¯ï¼ä¸è´ããè¦ç´ ãè¦ã¤ãããªããã° -1 ã¨ãªãã¾ãã
解説
findLastIndex() ã¡ã½ããã¯å復å¦çã¡ã½ããã§ããé
åã®ããããã®è¦ç´ ã«å¯¾ãã¦ãã¤ã³ããã¯ã¹ã®éé ã«ä¸åº¦ãã¤æå®ããã callbackFn 颿°ãå®è¡ãã callbackFn ãçå¤ãè¿ãã¾ã§ç¶ãã¾ããããã¦ã findLastIndex() ããã®è¦ç´ ã®ã¤ã³ããã¯ã¹ãè¿ããé
åã®ã¤ãã¬ã¼ã¿ã¼ã忢ãã¾ãããã callbackFn ãçå¤ãè¿ããªãã£ãå ´åã findLastIndex() 㯠-1 ãè¿ãã¾ãããããã®ã¡ã½ãããä¸è¬çã«ã©ã®ããã«åä½ããã®ãã«ã¤ãã¦ã®è©³ç´°ã¯ãå復å¦çã¡ã½ããã®ç¯ãã覧ãã ããã
callbackFn ã¯ãå¤ãå²ãå½ã¦ããã¦ãããã®ã«éãããé
åä¸ã®ãã¹ã¦ã®ã¤ã³ããã¯ã¹ã«å¯¾ãã¦å¼ã³åºããã¾ããçé
åã§ã¯ã空ã®ã¹ããã㯠undefined ã¨åãåä½ããã¾ãã
findLastIndex() ã¡ã½ããã¯æ±ç¨çã§ãããã㯠this å¤ã« length ããããã£ã¨æ´æ°ãã¼ã®ããããã£ããããã¨ã ããæå¾
ãã¾ãã
ä¾
>é åå ã®æå¾ã®ç´ æ°ã®ä½ç½®ãæ¢ã
以ä¸ã®ä¾ã§ã¯ãé
åã®æå¾ã®è¦ç´ ãç´ æ°ã§ããå ´åã®ã¤ã³ããã¯ã¹ãè¿ãã¾ããç´ æ°ãåå¨ããªãå ´å㯠-1 ãè¿ãã¾ãã
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].findLastIndex(isPrime)); // -1, not found
console.log([4, 5, 7, 8, 9, 11, 12].findLastIndex(isPrime)); // 5
ã¡ã¢:
isPrime() ã®å®è£
ã¯ã説æã®ã¿ãç®çã¨ãã¦ãã¾ããå®éã®ã¢ããªã±ã¼ã·ã§ã³ã§ã¯ãç¹°ãè¿ãè¨ç®ãé¿ããããã«ãã¨ã©ãã¹ããã¹ã®ç¯©ãªã©ã®ãé«åº¦ã«æé©åãããã¢ã«ã´ãªãºã ã使ç¨ãããã¨ããå§ããã¾ãã
callbackFn ã®ç¬¬ 3 弿°ã®ä½¿ç¨
array 弿°ã¯ãé
åå
ã®å¥ã®è¦ç´ ã«ã¢ã¯ã»ã¹ããå ´åãç¹ã«ããã®é
åãåç
§ããæ¢åã®å¤æ°ããªãå ´åã«ä¾¿å©ã§ããæ¬¡ã®ä¾ã§ã¯ãæåã« filter() ã使ç¨ãã¦æ£ã®å¤ãæ½åºããæ¬¡ã« findLastIndex() ã使ç¨ãã¦ããã®é£ãããå°ããæå¾ã®è¦ç´ ãæ¢ãã¾ãã
const numbers = [3, -1, 1, 4, 1, 5, 9, 2, 6];
const lastTrough = numbers
.filter((num) => num > 0)
.findLastIndex((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(lastTrough); // 6
çé åã«å¯¾ãã findLastIndex() ã®ä½¿ç¨
çé
åãã undefined ãæ¤ç´¢ãã空ã®ã¹ãããã®ã¤ã³ããã¯ã¹ãåå¾ãããã¨ãã§ãã¾ãã
console.log([1, , 3].findLastIndex((x) => x === undefined)); // 1
é åã§ãªããªãã¸ã§ã¯ãã«å¯¾ãã findLastIndex() ã®å¼ã³åºã
findLastIndex() ã¡ã½ãã㯠this ã® length ããããã£ãèªã¿è¾¼ã¿ã次ã«ãã¼ã length ããå°ããéè² ã®æ´æ°ã§ããåããããã£ã«ã¢ã¯ã»ã¹ãã¾ãã
const arrayLike = {
length: 3,
0: 2,
1: 7.3,
2: 4,
3: 3, // length ã 3 ã§ãããã findLastIndex() ããç¡è¦ããã
};
console.log(
Array.prototype.findLastIndex.call(arrayLike, (x) => Number.isInteger(x)),
); // 2
仿§æ¸
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-array.prototype.findlastindex> |
ãã©ã¦ã¶ã¼ã®äºææ§
é¢é£æ å ±
Array.prototype.findLastIndexã®ããªãã£ã« (core-js)- es-shims ã«ãã
Array.prototype.findLastIndexã®ããªãã£ã« - ã¤ã³ããã¯ã¹ä»ãã³ã¬ã¯ã·ã§ã³ã®ã¬ã¤ã
ArrayArray.prototype.find()Array.prototype.findIndex()Array.prototype.findLast()Array.prototype.indexOf()Array.prototype.lastIndexOf()TypedArray.prototype.findLastIndex()