-6

こんにちは私は以下のコードを書きました

function unique(th){
   var obj = {};
   for(var i = 0, n = th.length; i < n ; i++){
       obj[th[i]] = th[i];
   }    
   obj.length = n ;
   return Array.prototype.slice.call(obj);
}

しかし、これは私に不要な出力を与えています。これを修正するのを手伝ってください。これがフィドルです。

4

2 に答える 2

1

私はあなたのロジックが何であったかわからないので、少し異なった動作する関数を作成し、可能な限り明確にしようとしています:

function unique(th){
   var yetseen = {};
   var newarray = [];
   for(var i = 0, n = th.length;  i < n ; i++){
       var val = th[i];
       if (!yetseen[val]) {
           yetseen[val] = true;
           newarray.push(val);
       }
   }    
   return newarray;
}
于 2012-06-29T11:54:58.337 に答える
0

Underscore.jsを使用する

これは、配列を操作するための多数の関数を備えたライブラリです。

_.uniq

_.uniq(array、[isSorted]、[iterator])エイリアス:unique ===を使用してオブジェクトの同等性をテストし、重複のないバージョンの配列を生成します。配列がソートされていることが事前にわかっている場合、isSortedにtrueを渡すと、はるかに高速なアルゴリズムが実行されます。変換に基づいて一意のアイテムを計算する場合は、イテレータ関数を渡します。

alert(_.uniq([2,2,1,4,5,6,2,9,1,1,6,3,2,1,9,6,4], false)​);​ //yields 2,1,4,5,6,9,3

于 2012-06-29T12:13:22.867 に答える