比如
var arr=[{name:"Alex"},{name:"Tom"}];
arr.indexOf({name:"Alex"});
比如
var arr=[{name:"Alex"},{name:"Tom"}];
arr.indexOf({name:"Alex"});
对象的数组并不是不能使用 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');
}
}
MDN官方文档上的 Polyfill 里是 === 比较的,所以不能满足你的需求。
if (k in O && O[k] === searchElement) {
return k;
}
8 回答4.7k 阅读✓ 已解决
6 回答3.4k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
5 回答6.3k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
Array.prototype.findIndex
Array.prototype.find
值得你拥有。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find