js配列除去のまとめ


配列項目の重複したエントリを削除します.おそらく複数あります.
考え方1:
新しい配列を定義し、元の配列の最初の要素を保存し、元の配列を1つずつ新しい配列の要素と比較し、新しい配列に存在しない場合は新しい配列に保存します.
function unique(arr){
 var res = [arr[0]];
 for(var i=1; i
考え方2:
配列原型オブジェクト上のsplice法を用いて、同じ値を削除します.
function unique(arr){
 var i,
  j,
  len = arr.length; 
 for(i = 0; i < len; i++){
  for(j = i + 1; j < len; j++){
   if(arr[i] == arr[j]){
    arr.splice(j,1);
    len--;
    j--;
   }
  }
 }
 return arr;
}
考え方3:
1と同様に、配列サイクルで配列の値が新しい配列に存在するかどうかを判定し、存在しない場合は新しい配列に挿入します.しかし、flaggaで存在を識別する必要はなく、直接indexOf、lastIndexOf、includesで判断します.
ps:配列にNaN、undefined、-0、および+0がある場合は、indexOf、lastIndexOfはNaNとundefinedが存在するかどうかを判断できないので、indexOfを使用しなければならない.
  • includes 使用シーンは戻り値の意味化と  NaN undefined、−0および+0の判断.
  • function unique(arr){
     var res = [];
     for(var i=0; i
  • indexOf lastIndexOfとの使用シーンは、マッチング値の位置を知る必要がある.
  • function unique(arr){
     var res = [];
     for(var i=0; i
    forサイクルは、filterとforEachで代替することもできます.
    function unique(arr){
     var res = [];
     res = arr.filter(function(item){
      return res.includes(item) ? '' : res.push(item);
     });
     return res;
    }
    function unique(arr){
     var res = [];
     arr.forEach(function(item){
      res.includes(item) ? '' : res.push(item);
     }); 
     return res;
    }
    考え方4:
    最初に元の配列を並べ替えて、隣のものと比較します.違いがあれば、新しい配列を保存します.
    function unique(arr){
     var arr2 = arr.sort();
     var res = [arr2[0]];
     for(var i=1; i
    考え方5:(推奨)
    ハッシュオブジェクト法は、配列中の値を新しいオブジェクトの属性として、ループ中に配列の値が新しいオブジェクトの属性に存在するかどうかを判定し、属性がない場合は新しい配列に格納する.
    function unique(arr){
     var res = [];
     var obj = {};
     for(var i=0; i
    考え方6:(推奨)
    ES 6によって追加されたSetデータ構造は、配列に類似しているが、その中の要素はすべて唯一であり、その構造関数は一つの配列をパラメータとして受け入れることができ、そしてES 6においてArayによって追加された静的方法fromを利用して、Setによって処理された後の類似の配列のオブジェクトを数セットに変換する.
    function unique10(arr){
     return Array.from(new Set(arr)); //   Array.from Set       
    }