2017-12-26 12 views
0

オブジェクトが配列内に存在するかどうかを調べるために、Array#includesを使用しました。常にfalseArray#indexOfを与えてくれました。 -1、私は$.inArrayのjQueryを使ってみましたが、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

JavaScriptでは、comparison for equality between objectsは通常、プロパティと値を一致させるのではなく、の参照を比較することによって発生します。以下の点を考慮してください

var o1 = {a: 1}; 
var o2 = {a: 1}; 
o1 == o2; // => false 
o1 === o2; // => false 

上記の例では、o1o2は同じ特性を有することが起こる別個のオブジェクトリテラルとして構築二つの別個のオブジェクトであるが、重要なことに、彼らは、同じオブジェクトではありません。そのため、アレイは「含み」と「のindexOf」の方法は同じとして扱いませんし、そのためには、それらを見つけることができません。

[o1].includes(o2); // => false 
[o1].indexOf(o2); // => -1 

プロパティを一致させることにより、配列内のオブジェクトを検索したい場合は、使用することを検討してくださいなどのライブラリ関数:

_.find([o1], o2); // => o1 
0

これらは同じプロパティを持つ2つの異なるオブジェクトです。それがfalseを返す理由は、値の代わりに参照によってオブジェクトをチェックしていることです。この場合は、等しくありません。

関連する問題