Странность 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 ответа:
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