You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数组中对象元素索引获取:为何indexOf返回-1及解决办法

为什么indexOf返回-1?如何获取目标索引?

原因

JavaScript里对象属于引用类型,indexOf方法判断元素匹配时用的是**严格相等(===)**规则。
哪怕options[0]和toCheck的内容完全一样,它们也是内存中两个独立的对象,引用地址不同,所以options[0] === toCheck结果为false,indexOf找不到匹配项,自然返回-1。

解决方法

方法一:使用findIndex(推荐)

直接对比对象的关键属性来定位:

const index = options.findIndex(item => item.id === toCheck.id && item.type === toCheck.type);
// 此时index的值为0,就是你要的目标索引

方法二:手动循环遍历

如果环境不支持ES6的findIndex,可以用普通循环实现:

let targetIndex = -1;
for (let i = 0; i < options.length; i++) {
  const currentItem = options[i];
  if (currentItem.id === toCheck.id && currentItem.type === toCheck.type) {
    targetIndex = i;
    break;
  }
}
// targetIndex最终会是0

方法三:深度对比所有属性(适用于复杂对象)

如果需要对比对象的所有属性是否一致,可以先实现一个简单的深度相等函数,再结合findIndex使用:

function isObjectEqual(objA, objB) {
  const keysA = Object.keys(objA);
  const keysB = Object.keys(objB);
  
  if (keysA.length !== keysB.length) return false;
  
  for (const key of keysA) {
    if (objA[key] !== objB[key]) return false;
  }
  return true;
}

const index = options.findIndex(item => isObjectEqual(item, toCheck));

内容的提问来源于stack exchange,提问作者Leo Messi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 17:06:50