我有一个对象数组,然后我尝试查看该数组中是否存在对象,我使用Array#includes
总是给我false
和Array#indexOf
总是给出我-1
,我尝试使用jQuery的$.inArray
,但是我使用的是不支持jQuery的React Native。
事情是对象看起来完全一样,应该和我只是传递数据一样,我的日志:
阵列:
Array [
Object {
"age_range": Object {
"min": 21,
},
"city": "San Francisco",
"first_name": "Michelle",
"gender": "male",
"id": "1798537990447153",
"last_name": "West",
"locale": "en_GB",
"name": "Michelle West",
"option": "Option 5",
"picture": Object {
"data": Object {
"height": 236,
"is_silhouette": false,
"url": "https://scontent.xx.fbcdn.net/v/t1.0-1/10430919_1383337475300542_6783404984861635685_n.jpg?oh=0d76f0c209288149c0fb3cd4f09c211a&oe=5AD1C732",
"width": 236,
},
},
"sub": "Hjj",
"uid": "xx",
"updated_time": "2016-08-16T16:48:59+0000",
"verified": false,
},
]
对象:
Object {
"age_range": Object {
"min": 21,
},
"city": "San Francisco",
"first_name": "Michelle",
"gender": "male",
"id": "1798537990447153",
"last_name": "West",
"locale": "en_GB",
"name": "Michelle West",
"option": "Option 5",
"picture": Object {
"data": Object {
"height": 236,
"is_silhouette": false,
"url": "https://scontent.xx.fbcdn.net/v/t1.0-1/10430919_1383337475300542_6783404984861635685_n.jpg?oh=0d76f0c209288149c0fb3cd4f09c211a&oe=5AD1C732",
"width": 236,
},
},
"sub": "Hjj",
"uid": "xx",
"updated_time": "2016-08-16T16:48:59+0000",
"verified": false,
}
当使用工具仔细检查时我注意到的是一些间距差异可能是由不同的编辑引起的,我所做的只是Arr.includes(obj)
,可能导致问题的原因是什么以及如何正确识别是否那个对象存在吗?
答案 0 :(得分:0)
这是两个具有相同属性的不同对象。它返回false的原因是它通过引用而不是值来检查对象,在这种情况下它们不相等。
答案 1 :(得分:0)
在JavaScript中,comparison for equality between objects通常通过比较引用而不是通过匹配属性和值来实现。请考虑以下事项:
var o1 = {a: 1};
var o2 = {a: 1};
o1 == o2; // => false
o1 === o2; // => false
在上面的例子中,o1
和o2
是两个不同的对象,构造为单独的对象文字,碰巧具有相同的属性,但重要的是,它们不是相同的< / em>对象。因此,数组“包含”和“indexOf”方法不会将它们视为相等,因此无法找到它们:
[o1].includes(o2); // => false
[o1].indexOf(o2); // => -1
如果要通过匹配属性在数组中查找对象,请考虑使用库函数,例如lodash _.find(...)
或类似函数:
_.find([o1], o2); // => o1