猿问

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

我有这个


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

x ={name: 'mickey', lastname: 'mouse'}

arr.indexOf(x)

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


哆啦的时光机
浏览 730回答 3
3回答

守着星空守着你

由于您有对象数组,因此无法直接使用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));

弑天下

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));

慕少森

使用简单循环arr = [{name: 'pippo',lastname: 'p'},{name: 'mickey',lastname: 'mouse'}]x ={name: 'mickey', lastname: 'mouse'}for(let i=0;i< arr.length;i++){&nbsp; if(JSON.stringify(arr[i])===JSON.stringify(x))&nbsp; &nbsp;console.log(i)}
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答