导读:本期聚焦于小伙伴创作的《如何在 JavaScript 中利用 Array.indexOf() 快速查找特定元素在数组中的索引》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何在 JavaScript 中利用 Array.indexOf() 快速查找特定元素在数组中的索引》有用,将其分享出去将是对创作者最好的鼓励。

在JavaScript的数组操作中,查找特定元素的位置是高频需求,Array.indexOf()作为原生提供的数组方法,能快速实现这个能力,不需要开发者手动编写遍历逻辑。它从数组的第一个元素开始向后检索,返回第一个与指定值相等的元素的索引,如果数组中不存在该元素,则返回-1。

如何在 JavaScript 中利用 Array.indexOf() 快速查找特定元素在数组中的索引

Array.indexOf()的基本语法

该方法接受两个参数,第一个参数是要查找的目标元素,第二个参数是可选的起始查找索引,默认值为0。语法格式如下:

// 语法格式
arr.indexOf(searchElement[, fromIndex])

其中searchElement是必填项,表示需要查找的元素;fromIndex是选填项,如果是负数,会从数组末尾开始计算起始位置,比如-1表示从倒数第一个元素开始查找。

基本使用示例

下面通过几个常见场景展示方法的使用效果:

查找基本数据类型元素

对于数字、字符串、布尔值这类基本数据类型,直接使用方法即可返回正确索引:

const numArr = [10, 20, 30, 20, 40];
// 查找20第一次出现的位置
console.log(numArr.indexOf(20)); // 输出1
// 从索引2开始查找20
console.log(numArr.indexOf(20, 2)); // 输出3
// 查找不存在的元素50
console.log(numArr.indexOf(50)); // 输出-1

const strArr = ['apple', 'banana', 'orange', 'banana'];
console.log(strArr.indexOf('banana')); // 输出1

查找引用类型元素

对于对象、数组这类引用类型,indexOf()会比较引用地址,只有同一个引用才会被判定为相等:

const obj1 = { name: 'test' };
const obj2 = { name: 'test' };
const objArr = [obj1, obj2];
// obj1是数组中的第一个元素,返回0
console.log(objArr.indexOf(obj1)); // 输出0
// obj2和数组中的第二个元素是同一个引用,返回1
console.log(objArr.indexOf(obj2)); // 输出1
// 新创建的对象和obj1内容相同但引用不同,返回-1
console.log(objArr.indexOf({ name: 'test' })); // 输出-1

注意事项

  • indexOf()使用严格相等(===)进行比较,不会做类型转换,比如数字1和字符串'1'会被判定为不相等:
const mixedArr = [1, '1', 2];
console.log(mixedArr.indexOf(1)); // 输出0
console.log(mixedArr.indexOf('1')); // 输出1
  • 如果fromIndex大于等于数组长度,会直接返回-1,不会再执行查找:
const arr = [1, 2, 3];
console.log(arr.indexOf(2, 5)); // 输出-1
  • 如果fromIndex是负数,且绝对值大于数组长度,会从索引0开始查找:
const arr = [1, 2, 3];
// -5的绝对值大于数组长度3,从索引0开始查找
console.log(arr.indexOf(1, -5)); // 输出0

和其他查找方法的区别

JavaScript中还有Array.findIndex()Array.includes()等查找相关方法,和indexOf()的差异如下:

方法返回值适用场景
indexOf()第一个匹配元素的索引,无匹配返回-1查找基本数据类型,或需要获取索引的场景
findIndex()第一个满足条件的元素的索引,无匹配返回-1需要根据自定义条件查找元素的场景
includes()布尔值,表示是否存在该元素只需要判断元素是否存在,不需要索引的场景

实际业务场景应用

比如在购物车场景中,判断某个商品是否已经在购物车列表里,就可以用indexOf()实现:

// 购物车商品列表,每个商品是包含id的对象
const cartList = [
  { id: 1, name: '商品A', price: 100 },
  { id: 2, name: '商品B', price: 200 }
];
// 要添加的新商品
const newGoods = { id: 2, name: '商品B', price: 200 };
// 提取所有商品id组成数组,查找新商品id的索引
const goodsIdList = cartList.map(item => item.id);
const targetIndex = goodsIdList.indexOf(newGoods.id);
if (targetIndex === -1) {
  // 不存在则添加
  cartList.push(newGoods);
  console.log('商品已添加到购物车');
} else {
  console.log('商品已经在购物车中');
}

通过上面的示例可以看出,合理使用Array.indexOf()可以减少手动遍历的代码量,让数组查找逻辑更简洁。只要注意它的比较规则和参数特性,就能在合适的场景中发挥它的作用。

Array_indexOfJavaScript数组元素查找索引定位修改时间:2026-07-12 13:48:29

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。