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;
}

代码看起来有点“忙”,我想知道是否有更优雅的方式从数组中提取唯一值。

4

2 回答 2

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;
    }    
  }
于 2010-07-22T12:09:41.153 回答
-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
于 2010-07-22T11:24:59.210 回答