Javascript 奇怪的对象数组和 indexOf

IT技术 javascript arrays object indexof
2021-03-16 14:16:08

不太明白这里发生了什么。给定数组 (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个回答

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

精确的副本是不够的,它必须是完全相同的 object,即数组中必须有某个对象,使得:

arr[i] === obj

您需要展示您如何检索该对象。

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

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