2011-01-02 9 views
3

여기 내 데이터 구조입니다 :만 장소에서하지 않을 경우 이미 추가

var data = [ 
{ id: '1924', info: 'boo' }, 
{ id: '1967', info: 'foo' } 
]; 

ID 값은 고유해야하지만, 정보를 고유하지 않을 수 있습니다. 새 데이터의 ID가 고유 한 경우에만 데이터 해시에 새 데이터를 추가하는 방법은 무엇입니까?

전체 해시를 반복하고 해당 ID가 이미 있는지 확인하는 유일한 방법은 무엇입니까? 당신이 당신의 데이터 구조를 변경할 수있는 경우

data.push({ id: '1967', info: 'goo-goo' }); //should not be added 
data.push({ id: '1963', info: 'goo-goo' }); //should be added 

답변

9

, 그것은 적은 코드로 수행 할 수 있습니다

var data = { 
    '1924': {'info': 'goo-goo'}, 
    '1967': {'info': 'boo-boo'} 
}; 

function add(obj, id, data) { 
    if (obj[id] === undefined) { // if you have fear about the prototype chain being poisoned 
           // add in a hasOwnProperty 
     obj[id] = data; 
    } 
} 

이것은 또한 액세스 훨씬 빨리되는 이점이있을 것이다 (당신이 ID가있는 경우) .

-1

Ivo, 솔루션의 문제점은 현재 표시되고있는 정보의 색인도 추적한다는 것입니다. { id: '1967', info: 'foo' }의 색인은 해당 데이터 해시에서 1이 될 것이므로 필요할 경우 으로 참조 할 수 있습니다.

+1

배열에서 뭔가가 제거 되 자마자 잘못된 인덱스가 반환됩니다 ('undefined'로 바꾸지 않는 한 다른 인덱스는 더 이상 사용할 필요가 없습니다.) 추 신 : 색인 대신 ID. 추 신 : 내 대답에 대해 간단하게 주석을 달 수 있습니다. –

관련 문제