js indexOf 的使用方法

1. 概念

JavaScript indexOf() 方法用于查找数组中元素的索引位置。它接受一个参数,该参数是要查找的元素,然后返回该元素在数组中第一次出现的索引。如果元素不存在于数组中,则返回 -1。

语法

javascript 复制代码
array.indexOf(searchElement, fromIndex)
  • searchElement: 要查找的元素。
  • fromIndex (可选): 开始查找的起始位置,默认为 0。如果指定了 fromIndex,则从该索引处开始向后查找。如果 fromIndex为负数,则它表示在数组末尾的偏移量,例如 -1 表示在最后一个元素之前开始查找。

返回值

indexOf() 方法返回搜索元素的索引,如果找到,则返回该元素的索引值;如果没有找到,则返回 -1

2. indexOf() 查找简单数组

javascript 复制代码
const array = [2, 9, 9, 4, 6, 7, 8];

console.log(array.indexOf(9)); // 输出: 1
console.log(array.indexOf(9, 2)); // 输出: 2
console.log(array.indexOf(5)); // 输出: -1

在上面的例子中,indexOf() 方法首先查找数字 9 在数组中的索引位置。然后,第二次使用 indexOf() 方法指定了起始搜索位置 2,并且找到了第二个数字 9 的索引。最后一个例子中,搜索的数字 5 不存在于数组中,因此返回 -1

3.indexOf() 查找复杂数组

indexOf() 方法在 JavaScript 中也可用于查找复杂类型(比如对象或数组)在数组中的位置。但是,对于复杂类型的查找,有一些需要注意的情况:

3.1 对象数组的 indexOf() 用法

如果要在包含对象的数组中查找对象,indexOf() 方法会在查找时比较引用而不是值。这意味着它会检查对象是否完全相同,而不是检查对象的属性值是否相同

javascript 复制代码
const array = [
    { id: 1, name: 'Alice' },
    { id: 2, name: 'Bob' },
    { id: 3, name: 'Charlie' }
  ];
  
  const obj = { id: 2, name: 'Bob' };
  
  console.log(array.indexOf(obj)); // 输出: -1,因为这是一个新的对象,与数组中的对象不是同一个引用
  
  console.log(array.indexOf(array[1])) // 输出: 1

上述例子中,尽管 obj 具有相同的属性值,但它是一个新对象,因此 indexOf() 返回 -1。要在数组中找到具有相同属性值的对象,可以使用 findIndex() 方法:

javascript 复制代码
const index = array.findIndex(element => element.id === obj.id && element.name === obj.name);
console.log(index); // 输出: 1,找到了具有相同属性值的对象在数组中的索引

3.2 数组中的数组的 indexOf() 用法

如果数组中包含其他数组,indexOf() 仍然会比较引用而不是值。如果你想要检查数组中是否包含一个具有相同值的子数组,可以使用 findIndex() 方法。

javascript 复制代码
const array = [
  [1, 2],
  [3, 4],
  [5, 6]
];

const subArray = [3, 4];

const index = array.findIndex(element => element.every((val, i) => val === subArray[i]));
console.log(index); // 输出: 1,找到了具有相同值的子数组在数组中的索引

上面的例子中,findIndex()every() 方法被用于比较数组中的子数组是否具有相同的值。

4. 总结

总之,对于复杂类型的数组,indexOf() 方法会检查引用而不是值。因此,在这样的情况下,可能需要使用 findIndex() 或自定义条件的方法来查找所需的元素。

相关推荐
Martin -Tang2 小时前
Vue 3 中,ref 和 reactive的区别
前端·javascript·vue.js
FakeOccupational3 小时前
nodejs 020: React语法规则 props和state
前端·javascript·react.js
放逐者-保持本心,方可放逐3 小时前
react 组件应用
开发语言·前端·javascript·react.js·前端框架
曹天骄5 小时前
next中服务端组件共享接口数据
前端·javascript·react.js
郝晨妤6 小时前
鸿蒙ArkTS和TS有什么区别?
前端·javascript·typescript·鸿蒙
喝旺仔la7 小时前
vue的样式知识点
前端·javascript·vue.js
别忘了微笑_cuicui7 小时前
elementUI中2个日期组件实现开始时间、结束时间(禁用日期面板、控制开始时间不能超过结束时间的时分秒)实现方案
前端·javascript·elementui
尝尝你的优乐美7 小时前
vue3.0中h函数的简单使用
前端·javascript·vue.js
windy1a7 小时前
【C语言】js写一个冒泡顺序
javascript
会发光的猪。7 小时前
如何使用脚手架创建一个若依框架vue3+setup+js+vite的项目详细教程
前端·javascript·vue.js·前端框架