2010-07-22 2 views
0

Имея дело с JSON, возвращаемым с YQL, я обнаружил, что ищу способ извлечь все уникальные значения из массива.Уникальные значения массива

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's] (http://stackoverflow.com/questions/3308257/array-unique-values/3308650#3308650) ответ должен помочь вам. – salathe

ответ

1

Вы можете использовать IndexOf, чтобы проверить, является ли элемент в массиве.

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

или использовать объект вместо массива, если у вас есть уникальный идентификатор или имя: выхода переменных = {}

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

Если ваш массив имеет нетривиальную длину, стандартным способом извлечения уникальных элементов является сортировка или хэш-массив.

EDIT: Некоторые псевдокод

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

Пожалуйста, покажите мне код. –

 Смежные вопросы

  • Нет связанных вопросов^_^