代码之家  ›  专栏  ›  技术社区  ›  Q_Mlilo

数组唯一值

  •  0
  • Q_Mlilo  · 技术社区  · 15 年前

    在处理从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;
    }
    

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

    2 回复  |  直到 15 年前
        1
  •  1
  •   Andreas Köberle    15 年前

    可以使用indexOf检查元素是否在数组中。

     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;
        }    
      }
    
        2
  •  -1
  •   Peter G.    15 年前

    如果您的数组具有非平凡的长度,则提取唯一元素的标准方法是对数组进行排序或散列。

    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