Странность Javascript с массивом объектов и индексом


Не совсем понимаю, что здесь происходит. Учитывая массив (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 8

2 ответа:

Array.indexOf() будет работать только с объектами, если поставляемый объект является точно таким же объектом, который вы помещаете в.

Точной копии недостаточно, это должен быть точно такой же объект , т. е. в массиве должен быть какой-то объект, такой что:

arr[i] === obj

Вам нужно показать, как вы извлекли объект.

Я хотел бы увидеть функцию retrieve, но, скорее всего, вы не используете ту же ссылку. Потому что верно следующее:

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