js 数组的indexOf()可以判断对象数组中的对象有没有在数组中吗?

比如

var arr=[{name:"Alex"},{name:"Tom"}];
arr.indexOf({name:"Alex"});
阅读 42.2k
5 个回答

对象的数组并不是不能使用 indexOf ,来判断对象在数组的位置。
arr.indexOf({name:"Alex"}) 只是你上面的写法 是让数组 去判断一个 新创建的对象,
所以会得到 -1
例如下面的示例: 演示了如何使用 对象数组的 indexOf
var arr = []
var a = {name:"Alex"};
var b = {name:"Tom"};
arr.push(a,b)
JSON.stringify(arr)
"[{"name":"Alex"},{"name":"Tom"}]"
arr.indexOf(a)
0
arr.indexOf(b)
1
arr.lastIndexOf(a)
0
arr.lastIndexOf(b)
1

MDN官网上,find()的例子:

const inventory = [
    {name: 'apples', quantity: 2},
    {name: 'bananas', quantity: 0},
    {name: 'cherries', quantity: 5}
];
const result = inventory.find( fruit => fruit.name === 'cherries' );

console.log(result) // { name: 'cherries', quantity: 5 }

用find()基本可以满足你的需求。我的需求和你有一丁点不一样,我要获取指定属性对应的对象所在的索引,所以我用的是findIndex().

const inventory = [
    {name: 'apples', quantity: 2},
    {name: 'bananas', quantity: 0},
    {name: 'cherries', quantity: 5}
];
const result = inventory.findIndex( fruit => fruit.name === 'cherries' );

利用indexOf是判断不了的,返回-1,楼主可以循环判断:

for(item of arr){
    if(item.name=='Alex'){
        alert('find');
    }
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏