Javascript奇怪与对象数组和indexOf

时间:2011-12-23 16:13:32

标签: javascript arrays object indexof

不太了解这里发生的事情。给定数组(arr):

[
    {
        "first_name": "Dan",
        "last_name": "Woodson",
        "id": 1
    },
    {
        "first_name": "Jen",
        "last_name": "Woodson",
        "id": 2
    },
    {
        "first_name": "Yoshi",
        "last_name": "Woodson",
        "id": 3
    }
]

对象(obj):

{
    "first_name": "Yoshi",
    "last_name": "Woodson",
    "id": 3
}

为什么arr.indexOf(obj)会返回-1(特别是因为我在函数前面使用'id'参数从数组中检索了对象)?

2 个答案:

答案 0 :(得分:6)

Array.indexOf()仅适用于对象,如果提供的对象与放入的对象完全相同。

确切的副本是不够的,它必须是完全相同的对象,即数组中必须有一些对象:

arr[i] === obj

您需要显示检索对象的方式。

答案 1 :(得分:1)

我想看看检索功能,但很可能你没有使用相同的参考。因为以下是真的:

var a = {id: 3};
var b = [a];
b.indexOf(a); // 0
a.id = "not three";
b.indexOf(a); // still 0

但是,以下内容将会中断:

var a = {id: 3};
var b = [{id: 3}];
b.indexOf(a); // -1 not the same object