2010-07-22 2 views
0

YQL에서 반환 된 JSON을 처리하는 동안 배열에서 모든 고유 값을 추출하는 방법을 찾고있었습니다.배열 고유 값

function uniqueArrayValues(o){ 
     var items = o.query.results.row, 
      output = []; 

    function check(val){ 
    for(var c=0; c<output.length; c++){ 
     if(output[c] === val){ 
     return false; 
     } 
    } 
    return true; 
    } 

for(var i=1; i<items.length; i++){ 
    if(check(items[i].team)){ 
    output.push(items[i].team); 
    }  
    } 

    return output; 
} 

코드가 너무 바빠서 배열에서 고유 한 값을 추출하는보다 우아한 방법이 있는지 궁금해하고있었습니다.

+0

당신은 YQL 쿼리 내에서 고유 한 값으로 필터링 할 수 있습니다를 당신을위한 옵션. http://developer.yahoo.com/yql/guide/sorting.html ---'| unique (field = "row.team")'(결과 구조에 따라 필드가 다를 수도 있음). – salathe

+0

그 유일한 값을 필요로하는 경우 작동하지만 클라이언트 측에 이미있는 개체에서 이러한 값을 추출 오전 (나는 단지 한 YQL 요청을 만듭니다). –

+0

@ Q, 충분히 공평합니다. [eskimoblood의] (http://stackoverflow.com/questions/3308257/array-unique-values/3308650#3308650) 답변은 당신을 도울 것입니다. – salathe

답변

1

.

function check(val){ 
     return output.indexOf(val) != -1; 
    } 

또는 고유 ID 또는 이름이있는 경우 배열 대신 객체를 사용하는 경우, VAR 출력 = {}

for(var i=1; i<items.length; i++){ 
    if(!output[items[i].team.id])){ 
    output [items[i].team.id] = items[i].team; 
    }  
    } 
-1

배열의 길이가 중요하지 않은 경우 고유 요소를 추출하는 표준 방법은 배열을 정렬하거나 해시하는 것입니다.

편집 : 당신은 요소가 배열에 있는지 확인하기 위해 같이 IndexOf를 사용하여 일부 의사 코드

sort array 
last = unused 
for each v in array do 
    if v != last 
    uniqueArray.push_back(v) 
    last = v 
    end if 
end for 
// uniqueArray now contains the unique elements of array 
+2

코드를 보여주십시오. –