不太了解这里发生的事情。给定数组(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'参数从数组中检索了对象)?
答案 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