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

View in English Always switch to English

Array.prototype.findIndex()

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

findIndex() ๆ–นๆณ•่ฟ”ๅ›žๆ•ฐ็ป„ไธญๆปก่ถณๆไพ›็š„ๆต‹่ฏ•ๅ‡ฝๆ•ฐ็š„็ฌฌไธ€ไธชๅ…ƒ็ด ็š„็ดขๅผ•ใ€‚่‹ฅๆฒกๆœ‰ๆ‰พๅˆฐๅฏนๅบ”ๅ…ƒ็ด ๅˆ™่ฟ”ๅ›ž -1ใ€‚

ๅฆ่ฏทๅ‚้˜… find() ๆ–นๆณ•๏ผŒๅฎƒ่ฟ”ๅ›žๆปก่ถณๆต‹่ฏ•ๅ‡ฝๆ•ฐ็š„็ฌฌไธ€ไธชๅ…ƒ็ด ๏ผˆ่€Œไธๆ˜ฏๅฎƒ็š„็ดขๅผ•๏ผ‰ใ€‚

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

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

const isLargeNumber = (element) => element > 13;

console.log(array1.findIndex(isLargeNumber));
// Expected output: 3

่ฏญๆณ•

js
findIndex(callbackFn)
findIndex(callbackFn, thisArg)

ๅ‚ๆ•ฐ

callbackFn

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

element

ๆ•ฐ็ป„ไธญๅฝ“ๅ‰ๆญฃๅœจๅค„็†็š„ๅ…ƒ็ด ใ€‚

index

ๆญฃๅœจๅค„็†็š„ๅ…ƒ็ด ๅœจๆ•ฐ็ป„ไธญ็š„็ดขๅผ•ใ€‚

array

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

thisArg ๅฏ้€‰

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

่ฟ”ๅ›žๅ€ผ

ๆ•ฐ็ป„ไธญ็ฌฌไธ€ไธชๆปก่ถณๆต‹่ฏ•ๆกไปถ็š„ๅ…ƒ็ด ็š„็ดขๅผ•ใ€‚ๅฆๅˆ™่ฟ”ๅ›ž -1ใ€‚

ๆ่ฟฐ

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

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

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

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

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

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

็คบไพ‹

ๅฏปๆ‰พๆ•ฐ็ป„ไธญ็š„้ฆ–ไธช็ด ๆ•ฐ็š„็ดขๅผ•

ไปฅไธ‹็คบไพ‹่ฟ”ๅ›žๆ•ฐ็ป„ไธญ็ฌฌไธ€ไธช็ด ๆ•ฐ็š„็ดขๅผ•๏ผŒๅฆ‚ๆžœๆฒกๆœ‰็ด ๆ•ฐๅˆ™่ฟ”ๅ›ž -1ใ€‚

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, 9, 12].findIndex(isPrime)); // -1๏ผŒๆฒกๆœ‰ๆ‰พๅˆฐ
console.log([4, 6, 7, 9, 12].findIndex(isPrime)); // 2๏ผˆarray[2] ๆ˜ฏ 7๏ผ‰

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

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

ไฝ ๅฏไปฅๆœ็ดข็จ€็–ๆ•ฐ็ป„ไธญ็š„ undefined ๅนถๆฅ่Žทๅ–็ฉบๆงฝ็š„็ดขๅผ•ใ€‚

js
console.log([1, , 3].findIndex((x) => x === undefined)); // 1

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

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

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

่ง„่Œƒ

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

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

ๅ‚่ง