Web前端JavaScript中findIndex方法使用示例

 更新时间:2025年08月23日 14:24:02   作者:一只小风华~  
这篇文章主要介绍了Web前端JavaScript中findIndex方法使用的相关资料,findIndex() 返回第一个符合条件的数组子项的下标,找到符合条件的之后就不在继续遍历,需要的朋友可以参考下

1. findIndex是什么?

  • findIndex 是 JavaScript 数组(Array)自带的一个方法。

  • 它的核心任务是:遍历数组中的每一个元素,用你提供的一个“测试条件”(一个函数)去检查每个元素。一旦找到第一个能让这个“测试条件”返回 true 的元素,它就立刻停止查找,并返回这个元素在数组中的位置(索引)

  • 如果遍历完整个数组,都没有任何一个元素能让“测试条件”返回 true,那么 findIndex 就返回 -1(这是一个通用的“没找到”的信号)。

2. 它的作用(解决了什么问题?)

 想象一下这些场景:

  • 场景1: 你有一个学生名单(数组),每个学生是一个对象,包含 idnamescore。你想快速知道第一个分数大于 90 分的学生在名单里排第几位?

  • 场景2: 你有一个任务列表(数组),每个任务有 idtitlecompleted(是否完成)。你想找出第一个还没完成的任务(completed 为 false)在列表中的位置,以便把它置顶显示。

  • 场景3: 你在处理用户输入的一组数字,想找到第一个是负数的数字出现在第几个位置。

 在这些场景中,你都需要:

  1. 检查每个元素是否符合某个条件。

  2. 找到第一个符合条件的

  3. 得到它的位置(索引),而不是元素本身的值。

findIndex 方法就是被设计出来完美解决这类问题的!它帮你省去了手动写 for 循环遍历、设置标志变量、判断条件、找到后 break 跳出循环这些繁琐的步骤。

3. 如何使用?

findIndex 方法接收一个非常重要的参数:一个回调函数(callback function)。这个函数就是前面说的“测试条件”。它的基本语法是:

const foundIndex = array.findIndex(callbackFunction);

回调函数怎么写?

这个回调函数会被 findIndex 自动调用,通常接收三个参数(后两个可选):

  1. element当前正在被检查的数组元素(必须)。

  2. index: (可选)当前元素的索引。

  3. array: (可选)调用 findIndex 方法的那个数组本身。

最重要的是,这个回调函数需要返回一个布尔值(true 或 false):

  • 如果返回 true,表示当前元素符合你的条件findIndex 会立刻停止查找,并返回当前元素的索引。

  • 如果返回 false,表示不符合,findIndex 会继续检查下一个元素。

4. 举个栗子 

场景: 找学生名单里第一个分数大于 90 的学生位置。

const students = [
  { id: 1, name: '小明', score: 85 },
  { id: 2, name: '小红', score: 92 }, // 第一个 >90 的在这里!
  { id: 3, name: '小刚', score: 78 },
  { id: 4, name: '小丽', score: 95 }
];

// 使用 findIndex
const firstHighScoreIndex = students.findIndex(function(student) {
  // 回调函数:检查当前学生的分数是否大于90
  return student.score > 90;
});

console.log(firstHighScoreIndex); // 输出: 1 (因为小红在数组索引1的位置)

发生了什么?

  1. findIndex 从索引 0(小明)开始调用回调函数:小明.score > 90 -> 85 > 90 -> false -> 继续。

  2. 到索引 1(小红):小红.score > 90 -> 92 > 90 -> true! -> 立刻停止

  3. findIndex 返回 1(小红的索引)。

  4. 后面的小刚和小丽就不会再被检查了。

 更简洁的写法(箭头函数):

const firstHighScoreIndex = students.findIndex(student => student.score > 90);
console.log(firstHighScoreIndex); // 输出: 1

5. 如果没找到呢?

const firstHighScoreIndex = students.findIndex(student => student.score > 100); // 没人分数大于100
console.log(firstHighScoreIndex); // 输出: -1

6. 和它的“亲戚们”对比一下,加深理解

  • find: 这是 findIndex 的“双胞胎”。它做的事情几乎一样:遍历数组,用回调函数测试,找到第一个符合条件的元素。关键区别在于返回值:find 返回的是符合条件的那个元素本身(比如返回小红这个学生对象),而 findIndex 返回的是这个元素的索引(1)。你需要元素本身就用 find,需要位置就用 findIndex

  • indexOf / lastIndexOf: 这两个方法也返回索引。但它们找东西的方式简单粗暴:它们找的是严格等于(===) 某个具体值的元素。比如 students.indexOf({id:2, ...}) 是找不到小红的(因为对象引用不同),或者 [1, 2, 3].indexOf(2) 返回 1。而 findIndex 强大之处在于可以用任何复杂的条件(比如 score > 90)来找,不局限于简单的值相等。

  • filterfilter 会返回所有符合条件的元素组成的新数组。它不在乎位置,也不会在找到第一个后就停止,它会检查完所有元素。如果你只需要第一个,用 findIndex 或 find 性能更好。

  • somesome 只关心数组里有没有符合条件的元素(返回 true 或 false)。它不关心是哪一个,也不关心位置。找到第一个符合条件的就返回 true 并停止(这点和 findIndex 停止时机类似),但返回值是布尔值而不是索引。

7. 总结 & 关键点

  • findIndex 是数组方法:用来在数组中查找元素。

  • 核心功能:找到第一个满足你提供的“测试函数”(回调函数)的元素,并返回它的索引(位置)

  • 回调函数是核心:你定义查找条件的逻辑就写在这个函数里。它接收当前元素(必选)、索引(可选)、数组本身(可选),并必须返回 true 或 false

  • 找到就停:一旦回调函数对某个元素返回 truefindIndex 立刻返回该索引,停止后续查找。

  • 找不到返回 -1:如果遍历完都没找到符合条件的元素,返回 -1记得检查这个返回值!

  • 何时使用:当你需要知道数组中第一个满足某个(可能比较复杂的)条件的元素所在的位置时。

  • 优势:比手动写循环简洁,条件灵活(不像 indexOf 只能简单匹配值)。

到此这篇关于Web前端JavaScript中findIndex方法使用的文章就介绍到这了,更多相关JS findIndex方法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 微信小程序首页的分类功能和搜索功能的实现思路及代码详解

    微信小程序首页的分类功能和搜索功能的实现思路及代码详解

    这篇文章主要介绍了微信小程序首页的分类功能和搜索功能的实现思路及代码详解,微信宣布了微信小程序开发者工具新增“云开发”功能,现在无需服务器即可实现小程序的快速迭代,感兴趣的朋友跟随小编一起看看吧
    2018-09-09
  • 不使用JavaScript实现菜单的打开和关闭效果demo

    不使用JavaScript实现菜单的打开和关闭效果demo

    本文通过实例代码给大家分享在不使用JavaScript实现菜单的打开和关闭效果,非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2018-05-05
  • 你不知道的5个JavaScript中JSON的秘密功能分享

    你不知道的5个JavaScript中JSON的秘密功能分享

    在开发中,我们会经常使用 JSON.stringify(object) 来序列化对象,但JSON.stringify方法除了了第一个参数外,还有其它参数可用,今天我们一起来看看这些参数是做啥的
    2023-05-05
  • 一文让你快速了解JavaScript栈

    一文让你快速了解JavaScript栈

    这篇文章主要介绍了一文让你快速了解JavaScript栈,栈全称为堆栈,是一种先进后出的的数据结构,栈中只有两种基本操作,也就是插入和删除,也就是入栈和出栈操作,栈只有一端可以进行入栈和出栈操作,我们将其称为栈顶,另一端称其为栈底
    2022-07-07
  • Vue3中使用typescript封装axios的实例详解

    Vue3中使用typescript封装axios的实例详解

    这篇文章主要介绍了使用typescript封装axios的实例代码,为了方便,在vue3的配置里面按需加载element-plus,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2021-10-10
  • javascript按钮禁用和启用的效果实例代码

    javascript按钮禁用和启用的效果实例代码

    这篇文章主要介绍了javascript按钮禁用和启用的效果实例代码,需要的朋友可以参考下
    2017-10-10
  • JavaScript实现涂鸦笔功能

    JavaScript实现涂鸦笔功能

    这篇文章主要为大家详细介绍了JavaScript实现涂鸦笔功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • 微信小程序实现日期格式化

    微信小程序实现日期格式化

    这篇文章主要为大家详细介绍了微信小程序实现日期格式化,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • JavaScript访问字符串中单个字符的两种方法

    JavaScript访问字符串中单个字符的两种方法

    这篇文章主要介绍了JavaScript访问字符串中单个字符的两种方法,本文分别讲解了索引方式访问单个字符串、charAt()函数访问单个字符以及两种方式的不同,需要的朋友可以参考下
    2015-07-07
  • 小程序使用scroll-view实现一个滑动列表功能

    小程序使用scroll-view实现一个滑动列表功能

    scroll-view可实现一个可滚动的视图区域,下面这篇文章主要给大家介绍了关于小程序使用scroll-view实现一个滑动列表功能的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08

最新评论