Javascript 为什么在具有indexOf的数组中找不到该对象
当我搜索下面的对象文字时,我得到了索引-1,但我不明白为什么 我可以不使用复杂类型(如object literal)在数组中搜索此对象吗Javascript 为什么在具有indexOf的数组中找不到该对象,javascript,Javascript,当我搜索下面的对象文字时,我得到了索引-1,但我不明白为什么 我可以不使用复杂类型(如object literal)在数组中搜索此对象吗 var fruits = [{name: "Banana"}, {name: "Orange"}]; var index = fruits.indexOf({name: "Banana"}); -1表示数组中未找到{name:“Banana”}。这是因为第一个{name:“Banana”}与第二个{name:“Banana”}是不同的对象 如果您正在搜索一个
var fruits = [{name: "Banana"}, {name: "Orange"}];
var index = fruits.indexOf({name: "Banana"});
-1
表示数组中未找到{name:“Banana”}
。这是因为第一个{name:“Banana”}
与第二个{name:“Banana”}
是不同的对象
如果您正在搜索一个基元类型,它将按照您期望的方式工作。然而,对于一个对象,它会看到实际对象是相同的东西(即内存中的相同位置),而不仅仅是它们具有相同的值
因此:
foo
是与bar
不同的对象。它们恰好具有相同的属性。但它们在内存中占据不同的位置。或者,换句话说,如果我修改foo
,bar
保持不变
很多库已经为您解决了“deep equals”问题,所以如果您使用jQuery或下划线或其他东西,请检查这里。否则,请查看如何实现,因为存在一些问题。对于多维数组,我不相信您可以以如此简单的方式使用indexOf,但是,您可以使用以下内容:
for(var i = 0; i < fruits.length; i++) {
if(fruits[i].name === 'Banana') {
return i;
}
}
for(var i=0;i
对象不能以任何简单的方式进行比较,这里有一个相关的帖子:在简短的回答中对实际问题有帮助的解决方案:因为{name:“Banana”}==={name:“Banana”}
是错误的。正如其他评论和回答中所暗示的,使用==
,因此,对象成员只有在引用同一个对象时才会相等。@RobG:如果使用松散比较,则不会有什么区别。两个对象总是通过引用进行比较。哪个下划线命令可以实现您所描述的功能?@dandavisisEqual()
for(var i = 0; i < fruits.length; i++) {
if(fruits[i].name === 'Banana') {
return i;
}
}