2017-12-26 7 views
0

객체가 배열에 있는지 확인하려고했는데, 항상 falseArray#indexOf을주는 Array#includes을 사용했습니다. 항상 제공합니다. -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

JavaScript에서 comparison for equality between objects은 대개 참조을 비교하여 발생하며 속성 및 값을 일치시키지 않습니다. 그 같은 특성을 가지고하는 일, o1o2 별도의 객체 리터럴로 구성된 두 개의 별개의 객체입니다 위의 예에서

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

을하지만, 중요한 것은, 그들은 같은 개체 수없는 다음 고려하십시오. 같은 배열은 "포함"으로하고 "같이 IndexOf"방법은 동일로 처리되지 않습니다 및 그 그들을 찾을 수 없습니다 :

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

당신이 다음 사용을 고려 속성을 일치시켜 배열에서 객체를 찾으려면 또는 이와 유사한 라이브러리 함수 :

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

동일한 속성을 가진 두 개의 서로 다른 개체입니다. 거짓을 반환하는 이유는 값 대신 참조로 객체를 검사하기 때문에이 경우에는 동일하지 않습니다.