在处理从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 :(得分:1)
您可以使用indexOf检查元素是否在数组中。
function check(val){
return output.indexOf(val) != -1;
}
如果您有唯一的ID或名称,请使用对象而不是数组: var output = {}
for(var i=1; i<items.length; i++){
if(!output[items[i].team.id])){
output [items[i].team.id] = items[i].team;
}
}
答案 1 :(得分:-1)
如果您的数组具有非平凡的长度,则提取唯一元素的标准方法是对数组进行排序或散列。
编辑:一些伪代码
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