2014-10-09 2 views
1

이것은 기본적으로 자바 스크립트의 프로그래밍 스타일 질문입니다.해시 테이블로 배열 사용

var users = [ 
    { 
     id: 'USER-435', 
     name: 'James', 
     email: '[email protected]' 
    },{ 
     id: 'USER-7897', 
     name: 'Mark', 
     email: '[email protected]' 
    },{ 
     id: 'USER-2345', 
     name: 'Harry', 
     email: '[email protected]' 
    } 
] 

중요 : 내가 코딩있을 때

때때로 나 자신이, 예를 들어 같은 데이터의 수집을 통해 사용자의 컬렉션을 반복 찾을이 데이터는 서버에서 제공하며 필요 순서대로.

ID로 특정 사용자의 속성을 가져 오려면 배열을 반복하여 찾아야합니다.

그래서 내가 한 일은 배열을 한 번 반복하고 사용자 ID를 키로 사용하여 배열에 속성을 만드는 것입니다. 이렇게하면 배열을 반복하지 않고 ID를 사용하여 각 사용자에게 액세스 할 수 있습니다. = 연산자는 복사본이 아닌 개체에 대한 참조를 만들기 때문에 배열에 추가 된 각 속성은 참조가됩니다.

내가 발견 한 유일한 문제는 사용자의 ID가 숫자 인 경우 배열의 일부가된다는 것입니다. 따라서 ID가 120 인 사용자가 3 명인 콜렉션이있는 경우 배열의 길이를 121로 설정합니다. 'id-120'으로 속성을 추가 할 수는 있지만 느낌이 들지 않습니다. 매우 깨끗합니다.

배열에 새 속성을 만드는 대신 컬렉션에 대해 별도의 개체를 만들 수도 있습니다.하지만이 개체를 사용하면 필요한 새 개체가 만들어집니다.

저는 사람들이 이런 유형의 패턴에 대해 어떻게 생각하는지 물어보고 더 나은 방법을 사용하고 싶습니다.

+1

코드는 어디에 있습니까? – hindmost

답변

2

는 당신은이 작업을 수행 할 수있는 몇 가지 옵션이 있습니다. 배열을 객체로 다시 매핑하여 키별로 조회를 수행하는 것은 매우 일반적인 패턴입니다.

나는 'users_by_id'개체를 만드는 방법에 대해 너무 많이 걱정하지 것이다, 그것은 당신에게 많은 문제를 일으킬 가능성이

(코드는 이미 매우 복잡한 경우를 제외하고)하지만, 난 당신의 특정 문제에 대한 제안이있다. 왜 'by_id'라는 배열에 속성을 만들고 id로 인덱싱하는 객체로 만듭니다.

users.by_id['USER-2345']; 

'추가 변수'문제를 해결하고 키 - 클리 버링 문제 및 코드가 부팅시 자체적으로 설명됩니다.

행운을 빈다.

PS - 또한 underscore.js 또는 lodash를 확인하십시오. 이런 종류의 일을 매우 쉽게 만들어주는 루틴이 있습니다. 그들은 당신에게 엄청난 시간을 줄 것입니다.

0

여기서 Array.filter을 사용합니다. 함수에서

users.filter(function (v) { return v.id === 'USER-435'; }); 

: 같은 뭔가

function findUser(id) { 
    var user = users.filter(function (v) { return v.id === id; }); 
    return user.length ? user[0] : {id: 'not found'}; 
} 

이 반복해야하지만 배열이 포함 될 때까지, 말, 백만 명 이상의 요소, 나는 그것에 대해 걱정하지 않을 것입니다. 토니 호어를 인용 : 우리는 작은 효율성에 대해 잊지한다

은 약 97 % 시간의 말 : 조기 최적화는 모든 악의 뿌리입니다.

MDN
을보고 (공정하게) 또한 FALLACY OF PREMATURE OPTIMIZATION

+1

주된 질문은 배열을 통해 반복하는 것을 피하는 방법입니다. – ajorquera

+0

@ajorquera : 편집 된 답변 – KooiInc

+0

보기 미안하지만 @JayKuri의 대답은 훨씬 더 깨끗합니다. – ajorquera

관련 문제