javascript配列は重い3種類の常用方法を総括します.

2369 ワード

第一は一般的な方法です.
考え方:
1.新しい配列保存結果を構築する
2.forサイクルでは、元の配列から要素を取り出すたびに、この要素の循環と結果配列を用いて比較します.
3.結果配列にこの要素がないと結果配列に保存されます.
 
  
Array.prototype.unique1 = function(){
 var res = [this[0]];
 for(var i = 1; i < this.length; i++){
  var repeat = false;
  for(var j = 0; j < res.length; j++){
   if(this[i] == res[j]){
    repeat = true;
    break;
   }
  }
  if(!repeat){
   res.push(this[i]);
  }
 }
 return res;
}
var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0]
alert(arr.unique1());
第二の方法は上記の方法より効率が高いです.
考え方:
1.最初に元の配列を並べ替えます.
2.元の配列のi番目の要素と結果配列の最後の要素が同じかどうかを確認します.順序付けされているので、重複要素は隣の位置にあります.
3.同じでない場合は、結果配列にその要素を保存します.
 
  
Array.prototype.unique2 = function(){
 this.sort(); //
 var res = [this[0]];
 for(var i = 1; i < this.length; i++){
  if(this[i] !== res[res.length - 1]){
   res.push(this[i]);
  }
 }
 return res;
}
var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0]
alert(arr.unique2());
第二の方法にも一定の限界があります.重いものに行く前に並べ替えをしたので、最後に戻ったものは並べ替えの結果です.配列の順序を変えずに重いものを求めるなら、この方法は好ましくない.
第三の方法(推奨使用)
考え方:
1.新しい配列保存結果を作成します.
2.空のオブジェクトを作成します.
3.forループの場合、要素を取り出してオブジェクトと比較します.この要素が重複していない場合は、結果配列に保存し、同時にこの要素の内容を対象の属性とし、値を1として与え、第2ステップのオブジェクトに保存します.
説明:どのように対比するかというと、元の配列から要素を取り出して、対象の中にこの属性を訪問します.値にアクセスできれば、重複を説明します.
 
  
Array.prototype.unique3 = function(){
 var res = [];
 var json = {};
 for(var i = 0; i < this.length; i++){
  if(!json[this[i]]){
   res.push(this[i]);
   json[this[i]] = 1;
  }
 }
 return res;
}

var arr = [112,112,34,' ',112,112,34,' ','str','str1'];
alert(arr.unique3());

ソース:http://www.jb51.net/article/46154.htm