我有这个
arr = [{name: 'pippo',lastname: 'p'},{name: 'mickey',lastname: 'mouse'}]
x ={name: 'mickey', lastname: 'mouse'}
arr.indexOf(x)
为什么arr.indexOf(x)返回-1? 是否有另一种解决方案来在对象数组中查找对象的索引?
答案 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)
}