ๆญค้กต้ข็”ฑ็คพๅŒบไปŽ่‹ฑๆ–‡็ฟป่ฏ‘่€Œๆฅใ€‚ไบ†่งฃๆ›ดๅคšๅนถๅŠ ๅ…ฅ MDN Web Docs ็คพๅŒบใ€‚

View in English Always switch to English

Array.prototype.findLast()

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ๆœˆโฉ.

findLast() ๆ–นๆณ•ๅๅ‘่ฟญไปฃๆ•ฐ็ป„๏ผŒๅนถ่ฟ”ๅ›žๆปก่ถณๆไพ›็š„ๆต‹่ฏ•ๅ‡ฝๆ•ฐ็š„็ฌฌไธ€ไธชๅ…ƒ็ด ็š„ๅ€ผใ€‚ๅฆ‚ๆžœๆฒกๆœ‰ๆ‰พๅˆฐๅฏนๅบ”ๅ…ƒ็ด ๏ผŒๅˆ™่ฟ”ๅ›ž undefinedใ€‚

ๅฆ‚ๆžœไฝ ้œ€่ฆๆ‰พๅˆฐ๏ผš

  • ็ฌฌไธ€ไธชๅŒน้…็š„ๅ…ƒ็ด ๏ผŒไฝฟ็”จ find()ใ€‚
  • ๆ•ฐ็ป„ไธญๆœ€ๅŽไธ€ไธชๅŒน้…ๅ…ƒ็ด ็š„็ดขๅผ•๏ผŒไฝฟ็”จ findLastIndex()ใ€‚
  • ๆŸไธชๅ€ผ็š„็ดขๅผ•๏ผŒไฝฟ็”จ indexOf()ใ€‚๏ผˆๅฎƒ็ฑปไผผไบŽ findIndex()๏ผŒไฝ†ๆ˜ฏไผšๆฃ€ๆŸฅๆฏไธชๅ…ƒ็ด ๆ˜ฏๅฆไธŽๅ€ผ็›ธ็ญ‰๏ผŒ่€Œไธๆ˜ฏไฝฟ็”จไธ€ไธชๆต‹่ฏ•ๅ‡ฝๆ•ฐใ€‚๏ผ‰
  • ่ฏฅๆ•ฐ็ป„ไธญๆ˜ฏๅฆๅญ˜ๅœจไธ€ไธชๅ€ผ๏ผŒไฝฟ็”จ includes()ใ€‚ๅŒๆ ทๅœฐ๏ผŒๅฎƒๆฃ€ๆŸฅๆฏไธชๅ…ƒ็ด ๆ˜ฏๅฆๅ’Œๅ€ผ็›ธ็ญ‰๏ผŒ่€Œไธๆ˜ฏไฝฟ็”จไธ€ไธชๆต‹่ฏ•ๅ‡ฝๆ•ฐใ€‚
  • ๆ˜ฏๅฆๆœ‰ไปปๆ„ไธ€ไธชๅ…ƒ็ด ๆปก่ถณๆไพ›็š„ๆต‹่ฏ•ๅ‡ฝๆ•ฐ๏ผŒไฝฟ็”จ some()ใ€‚

ๅฐ่ฏ•ไธ€ไธ‹

const array1 = [5, 12, 50, 130, 44];

const found = array1.findLast((element) => element > 45);

console.log(found);
// Expected output: 130

่ฏญๆณ•

js
findLast(callbackFn)
findLast(callbackFn, thisArg)

ๅ‚ๆ•ฐ

callbackFn

ๆ•ฐ็ป„ไธญๆต‹่ฏ•ๅ…ƒ็ด ็š„ๅ‡ฝๆ•ฐใ€‚ๅ›ž่ฐƒๅบ”่ฏฅ่ฟ”ๅ›žไธ€ไธช็œŸๅ€ผ๏ผŒ่กจ็คบๅทฒๆ‰พๅˆฐๅŒน้…็š„ๅ…ƒ็ด ๏ผŒๅฆๅˆ™่ฟ”ๅ›žไธ€ไธชๅ‡ๅ€ผใ€‚ๅ‡ฝๆ•ฐๅœจ่ขซ่ฐƒ็”จๆ—ถไผšไผ ้€’ไปฅไธ‹ๅ‚ๆ•ฐ๏ผš

element

ๅฝ“ๅ‰้ๅކๅˆฐ็š„ๅ…ƒ็ด ใ€‚

index

ๅฝ“ๅ‰้ๅކๅˆฐ็š„ๅ…ƒ็ด ็š„็ดขๅผ•๏ผˆไฝ็ฝฎ๏ผ‰ใ€‚

array

่ฐƒ็”จ findLast() ็š„ๆ•ฐ็ป„ๆœฌ่บซใ€‚

thisArg ๅฏ้€‰

ๆ‰ง่กŒ callbackFn ๆ—ถ๏ผŒ็”จไฝœ this ็š„ๅ€ผใ€‚่ฏฆ่ง่ฟญไปฃๆ–นๆณ•ใ€‚

่ฟ”ๅ›žๅ€ผ

ๆ•ฐ็ป„ไธญๆปก่ถณๆไพ›็š„ๆต‹่ฏ•ๅ‡ฝๆ•ฐ็ดขๅผ•ๆœ€้ซ˜็š„ๅ…ƒ็ด ๏ผ›ๅฆ‚ๆžœๆฒกๆœ‰ๅ…ƒ็ด ๅŒน้…๏ผŒ่ฟ”ๅ›ž undefinedใ€‚

ๆ่ฟฐ

findLast() ๆ˜ฏไธ€ไธช่ฟญไปฃๆ–นๆณ•ใ€‚่ฏฅๆ–นๆณ•ๅฏนๆ•ฐ็ป„ๆฏไธ€ไธชๅ…ƒ็ด ๆŒ‰้™ๅบ๏ผˆ็ดขๅผ•ไปŽๅคงๅˆฐๅฐ๏ผ‰ๆ‰ง่กŒ callbackFn ๅ‡ฝๆ•ฐ๏ผŒ็›ดๅˆฐ callbackFn ่ฟ”ๅ›žไธ€ไธช็œŸๅ€ผใ€‚็„ถๅŽ findLast() ่ฟ”ๅ›ž่ฏฅๅ…ƒ็ด ็š„ๅ€ผๅนถๅœๆญข้ๅކๆ•ฐ็ป„ใ€‚ๅฆ‚ๆžœ callbackFn ๆฒกๆœ‰่ฟ”ๅ›žไธ€ไธช็œŸๅ€ผ๏ผŒๅˆ™ findLast() ่ฟ”ๅ›ž undefinedใ€‚

callbackFn ไผš่ขซๆ•ฐ็ป„ไธญ็š„ๆฏไธชๅ…ƒ็ด ่ฐƒ็”จ๏ผŒ่€Œไธไป…ไป…ๆ˜ฏ้‚ฃไบ›่ขซ่ต‹ๅ€ผ็š„ๅ…ƒ็ด ใ€‚ๅฏนไบŽ็จ€็–ๆ•ฐ็ป„ๆฅ่ฏด๏ผŒ็ฉบๆงฝ่กŒไธบๅ’Œ undefined ็›ธๅŒใ€‚

findLast() ๆ–นๆณ•ไธไผšๆ”นๅ˜่ฐƒ็”จๅฎƒ็š„ๆ•ฐ็ป„๏ผŒไฝ†ๆ˜ฏๆไพ›็š„ callbackFn ๅฏไปฅใ€‚ไฝ†ๆ˜ฏ่ฏทๆณจๆ„๏ผŒๆ•ฐ็ป„็š„้•ฟๅบฆๆ˜ฏๅœจ็ฌฌไธ€ๆฌก่ฐƒ็”จ callbackFn ไน‹ๅ‰ไฟๅญ˜็š„ใ€‚ๅ› ๆญค๏ผš

  • callbackFn ไธไผš่ฎฟ้—ฎๅœจ่ฐƒ็”จ findLast() ๅผ€ๅง‹ๅŽๆ‰ๆทปๅŠ ๅˆฐๆ•ฐ็ป„ไธญ็š„ไปปไฝ•ๅ…ƒ็ด ใ€‚
  • ็ป™ๅทฒ่ฎฟ้—ฎ่ฟ‡็š„็ดขๅผ•้‡ๆ–ฐ่ต‹ๅ€ผๅฐ†ไธไผš่ขซ callbackFn ้‡ๆ–ฐ่ฎฟ้—ฎใ€‚
  • ๅฆ‚ๆžœ callbackFn ๆ›ดๆ”นไบ†ๆ•ฐ็ป„ไธญ็Žฐๆœ‰็š„ใ€ๅฐšๆœช่ฎฟ้—ฎ็š„ๅ…ƒ็ด ๏ผŒๅˆ™ๅ…ถไผ ้€’็ป™ callbackFn ็š„ๅ€ผๅฐ†ๆ˜ฏ findLast() ่ฎฟ้—ฎ่ฏฅๅ…ƒ็ด ็ดขๅผ•ๆ—ถ็š„ๅ€ผใ€‚ๅทฒๅˆ ้™ค็š„ๅ…ƒ็ด ไผš่ขซๅฝ“ๅš undefined ๆฅ่ฎฟ้—ฎใ€‚

่ญฆๅ‘Š๏ผš ไธŠไธ€ๆฎตๆ่ฟฐ็š„ๅนถๅ‘ไฟฎๆ”น็š„ๆƒ…ๅ†ต็ปๅธธๅฏผ่‡ด้šพไปฅ็†่งฃ็š„ไปฃ็ ๏ผŒ้€šๅธธๅบ”่ฏฅ้ฟๅ…๏ผˆ็‰นๆฎŠๆƒ…ๅ†ต้™คๅค–๏ผ‰ใ€‚

findLast() ๆ–นๆณ•ๆ˜ฏ้€š็”จ็š„ใ€‚ๅฎƒๅชๆœŸๆœ› this ๅ€ผๅ…ทๆœ‰ length ๅฑžๆ€งๅ’Œๆ•ดๆ•ฐ้”ฎ็š„ๅฑžๆ€งใ€‚

็คบไพ‹

ๆŸฅๆ‰พไธŽๅ…ƒ็ด ๅฑžๆ€งๅŒน้…็š„ๆ•ฐ็ป„ไธญ็š„ๆœ€ๅŽไธ€ไธชๅฏน่ฑก

ๆญค็คบไพ‹ๅฑ•็คบไบ†ๅฆ‚ไฝ•ๆ นๆฎๆ•ฐ็ป„ๅ…ƒ็ด ็š„ๅฑžๆ€งๅˆ›ๅปบๆต‹่ฏ•ใ€‚

js
const inventory = [
  { name: "apples", quantity: 2 },
  { name: "bananas", quantity: 0 },
  { name: "fish", quantity: 1 },
  { name: "cherries", quantity: 5 },
];

// ๅบ“ๅญ˜ไฝŽๆ—ถ่ฟ”ๅ›ž true
function isNotEnough(item) {
  return item.quantity < 2;
}

console.log(inventory.findLast(isNotEnough));
// { name: "fish", quantity: 1 }

ไฝฟ็”จ็ฎญๅคดๅ‡ฝๆ•ฐๅ’Œ่งฃๆž„

ๅ‰้ข็š„็คบไพ‹ๅฏไปฅไฝฟ็”จ็ฎญๅคดๅ‡ฝๆ•ฐๅ’Œๅฏน่ฑก่งฃๆž„้‡ๅ†™ๅฆ‚ไธ‹๏ผš

js
const inventory = [
  { name: "apples", quantity: 2 },
  { name: "bananas", quantity: 0 },
  { name: "fish", quantity: 1 },
  { name: "cherries", quantity: 5 },
];

const result = inventory.findLast(({ quantity }) => quantity < 2);

console.log(result);
// { name: "fish", quantity: 1 }

ๆŸฅๆ‰พๆ•ฐ็ป„ไธญ็š„ๆœ€ๅŽไธ€ไธช็ด ๆ•ฐ

ไปฅไธ‹็คบไพ‹ๆŸฅๆ‰พๆ•ฐ็ป„ไธญ็š„ๆœ€ๅŽไธ€ไธช็ด ๆ•ฐๅ…ƒ็ด ๏ผˆๅฆ‚ๆžœๆฒกๆœ‰็ด ๆ•ฐ๏ผŒๅˆ™่ฟ”ๅ›ž 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].findLast(isPrime)); // undefined๏ผŒๆฒกๆœ‰ๆ‰พๅˆฐ
console.log([4, 5, 7, 8, 9, 11, 12].findLast(isPrime)); // 11

ๅค‡ๆณจ๏ผš isPrime() ๅฎž็Žฐไป…ไพ›ๆผ”็คบใ€‚ๅœจๅฎž้™…ๅบ”็”จไธญ๏ผŒไธบไบ†้ฟๅ…้‡ๅค่ฎก็ฎ—๏ผŒไผšไฝฟ็”จๅคง้‡่ฎฐๅฟ†ๅŒ–็š„็ฎ—ๆณ•๏ผŒไพ‹ๅฆ‚ๅŸƒๆ‹‰ๆ‰˜ๆ–ฏ็‰นๅฐผ็ญ›ๆณ•ใ€‚

ๅœจ็จ€็–ๆ•ฐ็ป„ไธŠไฝฟ็”จ findLast()

็จ€็–ๆ•ฐ็ป„ไธญ็š„็ฉบๆงฝ่ขซ่ฎฟ้—ฎ๏ผŒๅนถ่ขซ่ง†ไธบ undefinedใ€‚

js
// ๅฃฐๆ˜Žไธ€ไธชๅœจ็ดขๅผ• 2ใ€3 ๅ’Œ 4 ๅค„ๆฒกๆœ‰ๅ…ƒ็ด ็š„ๆ•ฐ็ป„
const array = [0, 1, , , , 5, 6];

// ๆ˜พ็คบๆ‰€ๆœ‰็š„็ดขๅผ•๏ผˆไธๅชๅŒ…ๆ‹ฌ้‚ฃไบ›่ขซ่ต‹ๅ€ผ็š„๏ผ‰
array.findLast((value, index) => {
  console.log(`่ฎฟ้—ฎ็ดขๅผ• ${index}๏ผŒๅ€ผไธบ ${value}`);
});
// ่ฎฟ้—ฎ็ดขๅผ• 6๏ผŒๅ€ผไธบ 6
// ่ฎฟ้—ฎ็ดขๅผ• 5๏ผŒๅ€ผไธบ 5
// ่ฎฟ้—ฎ็ดขๅผ• 4๏ผŒๅ€ผไธบ undefined
// ่ฎฟ้—ฎ็ดขๅผ• 3๏ผŒๅ€ผไธบ undefined
// ่ฎฟ้—ฎ็ดขๅผ• 2๏ผŒๅ€ผไธบ undefined
// ่ฎฟ้—ฎ็ดขๅผ• 1๏ผŒๅ€ผไธบ 1
// ่ฎฟ้—ฎ็ดขๅผ• 0๏ผŒๅ€ผไธบ 0

// ๆ˜พ็คบๆ‰€ๆœ‰็š„็ดขๅผ•๏ผˆๅŒ…ๆ‹ฌๅทฒ่ขซๅˆ ้™ค็š„๏ผ‰
array.findLast((value, index) => {
  // ๅœจ็ฌฌไธ€ๆฌก่ฟญไปฃๆ—ถๅˆ ้™คๅ€ผไธบ 5 ็š„ๅ…ƒ็ด 
  if (index === 6) {
    console.log(`ๅˆ ้™คๅ€ผไธบ array[5]๏ผŒๅ…ถๅ€ผไธบ ${array[5]}`);
    delete array[5];
  }
  // ๅ…ƒ็ด  5 ๅœจ่ขซๅˆ ้™คๅŽ๏ผŒไปไผš่ขซ่ฎฟ้—ฎ
  console.log(`่ฎฟ้—ฎ็ดขๅผ• ${index}๏ผŒๅ€ผไธบ ${value}`);
});
// ๅˆ ้™คๅ€ผไธบ array[5]๏ผŒๅ…ถๅ€ผไธบ 5
// ่ฎฟ้—ฎ็ดขๅผ• 6๏ผŒๅ€ผไธบ 6
// ่ฎฟ้—ฎ็ดขๅผ• 5๏ผŒๅ€ผไธบ undefined
// ่ฎฟ้—ฎ็ดขๅผ• 4๏ผŒๅ€ผไธบ undefined
// ่ฎฟ้—ฎ็ดขๅผ• 3๏ผŒๅ€ผไธบ undefined
// ่ฎฟ้—ฎ็ดขๅผ• 2๏ผŒๅ€ผไธบ undefined
// ่ฎฟ้—ฎ็ดขๅผ• 1๏ผŒๅ€ผไธบ 1
// ่ฎฟ้—ฎ็ดขๅผ• 0๏ผŒๅ€ผไธบ 0

ๅœจ้žๆ•ฐ็ป„ๅฏน่ฑกไธŠ่ฐƒ็”จ findLast()

findLast() ๆ–นๆณ•่ฏปๅ– this ็š„ length ๅฑžๆ€ง๏ผŒ็„ถๅŽ่ฎฟ้—ฎๆฏไธชๆ•ดๆ•ฐ็ดขๅผ•ใ€‚

js
const arrayLike = {
  length: 3,
  0: 2,
  1: 7.3,
  2: 4,
};
console.log(
  Array.prototype.findLast.call(arrayLike, (x) => Number.isInteger(x)),
); // 4

่ง„่Œƒ

Specification
ECMAScriptยฎ 2026 Language Specification
# sec-array.prototype.findlast

ๆต่งˆๅ™จๅ…ผๅฎนๆ€ง

ๅ‚่ง