对象数组中javascript对象的索引

时间:2016-07-24 10:54:38

标签: javascript arrays object

我在javascript中有一个对象数组,类似于

var arrayobj = [{a:'a'},{b:'b'},{c:'c'}](但值更复杂)。

现在我手动检查某个对象的索引,例如arrayobj[1]

我得到了Object {b: "b"}

现在我输入arrayobj.indexOf({b:'b'}); 响应是-1(又名未找到)。

任何人都可以告诉我为什么会这样?我已经阅读了有关indexOf方法和数组的文档,但我仍然没有任何线索。

提前致谢!

5 个答案:

答案 0 :(得分:3)

indexOf检查是否相等(特别是严格的相等,===,但对于这个问题并不重要)。两个不同的对象即使具有相同的属性也彼此不相等。数组中的对象和传递给indexOf的对象是不同的对象,因此它们不匹配。

如果您搜索了相同的对象,它会找到它:



var b = {b:'b'};
var arrayobj = [{a:'a'},b,{c:'c'}];
console.log(arrayobj.indexOf(b)); // 1




答案 1 :(得分:1)

indexOf方法返回可在数组中找到给定元素的第一个索引,如果不存在则返回-1。

arrayobj是一个对象数组,在第一种情况下arrayobj[1]它将返回索引为1的元素。

在第二种情况下,arrayobj.indexOf({b:'b'})不是指arrayobj中的对象,而是指另一个对象。

答案 2 :(得分:1)

arrayobj.indexOf({b:'b'})

虽然内容相同,但您在indexOf方法中提供了一个新对象。 IndexOf将检查严格的相等性,因此对象的引用需要相同

答案 3 :(得分:1)

当您致电arrayobj.indexOf({b:'b'})时,对象{b:'b'}与数组中的对象不同。这2个对象具有相同的"值"但在记忆中是不同的。

例如,如果你这样做:

var object = {b:'b'}
var arrayobj = [{a:'a'},object,{c:'c'}]

var arrayobj = [{a:'a'},{b:'b'},{c:'c'}]
var object = arrayobj[1]

arrayobj.indexOf(object)将返回1,因为它实际上是同一个对象,而不是"副本"

答案 4 :(得分:-2)

Javascript IndexOf函数仅适用于值类型,而不适用于您的案例中的引用类型。就像你将{b:'b'}传递给indexOf函数一样,它就是一个完全不同的对象/引用。如果你首先从列表中获取对象,然后在列表中检查该引用,那么如果存在对象/引用,它肯定会返回大于-1的

ignoreElements()

你可以使用for循环而不是内置函数。