Странность Javascript с массивом объектов и indexOf - PullRequest
8 голосов
/ 23 декабря 2011

Не совсем понимаю, что здесь происходит. Учитывая массив (обр):

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

И объект (объект):

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

Почему arr.indexOf(obj) возвращает -1 (особенно если я извлек объект из массива, используя его параметр 'id' ранее в функции)?

Ответы [ 2 ]

6 голосов
/ 23 декабря 2011

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

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

arr[i] === obj

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

1 голос
/ 23 декабря 2011

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

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
...