2011-12-23 1 views
8

여기에 무슨 일이 일어나고 있는지 전혀 파악하지 못했습니다. 주어 배열 (편곡) :오브젝트의 배열과 인덱스가있는 자바 스크립트 홀수

[ 
    { 
     "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) 수익 나는 그것이 'ID'매개 변수 이전의 사용하여 배열에서 개체를 검색 할 특히 이후 -1 (함수에서)?

+0

당신이 "기능의 이전"무엇을 의미합니까? JSON뿐만 아니라 실패한 코드를 보여줄 필요가 있습니다. – Incognito

+0

사용중인 실제 코드를 게시하거나 fsFiddle에 올릴 수 있습니까? – jefflunt

+4

'({a : 12}) === ({a : 12})'가'거짓 '이기 때문입니다. 동일한 값이 아니라 동일한 객체 (동일한 참조) 인 경우 JavaScript의 객체는 동일합니다. –

답변

5

Array.indexOf() 제공된 오브젝트가 인 경우 정확히 동일한 오브젝트가 인 경우에만 오브젝트에서 작동합니다.

정확한 사본이 부족, 그것은 동일한 개체 수있다, 즉 배열의 일부 개체가 있어야 있도록 :

arr[i] === obj 

당신은 당신이를 검색하는 방법을 표시해야 목적.

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