在对象数组中查找对象的索引

时间:2019-12-03 08:40:38

标签: javascript arrays reactjs object indexof

我有这个

arr = [{name: 'pippo',lastname: 'p'},{name: 'mickey',lastname: 'mouse'}]
x ={name: 'mickey', lastname: 'mouse'}
arr.indexOf(x)

为什么arr.indexOf(x)返回-1? 是否有另一种解决方案来在对象数组中查找对象的索引?

3 个答案:

答案 0 :(得分:5)

由于您具有对象数组,因此无法使用indexOf()直接获取该对象在该数组中的索引。您需要使用findIndex(),以便在数组中有匹配的对象时,它返回该对象的相应索引,否则返回-1

arr = [{name: 'pippo',lastname: 'p'},{name: 'mickey',lastname: 'mouse'}]
x ={name: 'mickey', lastname: 'mouse'}
console.log(arr.findIndex((obj) => obj.name == x.name && obj.lastname === x.lastname));

答案 1 :(得分:1)

indexOf()检查数组内部对象的引用。由于您要创建一个新对象并将其作为参数传递给indexOf(),因此它与数组内对象的引用不匹配,因此会失败。

let arr = [{name: 'pippo',lastname: 'p'},{name: 'mickey',lastname: 'mouse'}]
arr.indexOf(arr[1])

鉴于引用相同,此代码将按预期返回1。

@Ankit提供的解决方案

arr = [{name: 'pippo',lastname: 'p'},{name: 'mickey',lastname: 'mouse'}]
x ={name: 'mickey', lastname: 'mouse'}
console.log(arr.findIndex((obj) => obj.name == x.name && obj.lastname === x.lastname));

答案 2 :(得分:0)

使用简单循环

arr = [{name: 'pippo',lastname: 'p'},{name: 'mickey',lastname: 'mouse'}]
x ={name: 'mickey', lastname: 'mouse'}


for(let i=0;i< arr.length;i++){
  if(JSON.stringify(arr[i])===JSON.stringify(x))
   console.log(i)
}