2014-01-23 7 views
0

나는 현재 다음 사용하고 있습니다 :_lodash를 사용하여 필드가 일치하는 첫 번째 발생에 대한 배열을 어떻게 확인할 수 있습니까?

for (var i = 0; i < x.length; i++) 
     if (x[i].id === userId) 
     return x[i].name; 

이 사용자 이름을 반환합니다.

Lo-Dash를 사용하여보다 효율적인 방법이 있습니까? ID는 고유하므로 더 이상 확인할 필요가없는 것으로 나타났습니다.

+0

매우 자주 필요한 경우 사용자 데이터를 확인하기 위해 다른 개체를 만들어야합니다. userID가 유일하기 때문에 :'varuserdata = {someuserid : {id : "someusersid", 이름 : 'Some Name'}, anotheruserid : {id : "anotheruserid", 이름 : '다른 이름'}}; 이게 더 효율적인 지 확신 할 수 없습니다. – Tschitsch

답변

0

_lodash를 사용하여보다 효율적인 방법이 있습니까?

아니요 일반 구형 네이티브 for 루프보다 훨씬 효율적입니다. 그러나 당신은 lodash로 적은 코드로 그것을 할 수 있습니다.

return _.where(x, { id: userId})[0]; 

을하지만 그것을 발견 할 때 검사를 중지하지 때문에 코드를보다 효율적으로 될 것 :

당신은 _.where을 사용할 수 있습니다 (오히려 객체보다, 새로운 배열을 반환합니다) 첫 번째 사건. 입력하기 조금 짧습니다. 간단한 루프가 얼마나 효율적인지 신경 쓰지 않아도됩니다.

0
var i = x.length; 

while (i--) 
    if (x[i].id === userId) 
    { 
    return x[i].name; 
    break; 
    } 

이것은 객체 배열을 반복하는 가장 효율적인 방법입니다. 우선 배열 반복의 길이를 확인하지 않아도됩니다. 둘째로 당신이 당신의 품목을 찾을 때 당신은 반복을 끊는다.

EDITED : 뒤에서 탐색 시작 순서를 신경 쓰지 않으면 더 빠릅니다.

+0

인덱스 0은이 솔루션에서 실제로 무시됩니다. – Tschitsch

+0

@Tschitsch thx는이를 고지하지 않았습니다. – Dharman