1. 程式人生 > >Js陣列去重方法

Js陣列去重方法

 //方法一
  var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5];
 function removeDuplicatedItem(arr) {
     for(var i = 0; i < arr.length-1; i++){
         for(var j = i+1; j < arr.length; j++){
             if(arr[i]==arr[j]){
 
               arr.splice(j,1);//console.log(arr[j]);
                j--;
            }
        }
    }
    return arr;
 }

 arr2 = removeDuplicatedItem(arr);
 console.log(arr);
 console.log(arr2);

  //方法二
  //藉助indexOf()方法判斷此元素在該陣列中首次出現的位置下標與迴圈的下標是否相等
  var ar = [1,23,1,1,1,3,23,5,6,7,9,9,8,5];
 function rep2(arr) {
      for (var i = 0; i < arr.length; i++) {
          if (arr.indexOf(arr[i]) != i) {
              arr.splice(i,1);//刪除陣列元素後陣列長度減1後面的元素前移
              i--;//陣列下標回退
          }
     }
     return arr;
 }
 var a1 = rep2(ar);
 console.log(ar);
 console.log(a1);

  //方法三  利用陣列中的filter方法
  var arr = ['apple','strawberry','banana','pear','apple','orange','orange','strawberry'];
  var r = arr.filter(function(element,index,self){
     return self.indexOf(element) === index;
  });
  console.log(r);

  //方法四  藉助新陣列 通過indexOf方判斷當前元素在陣列中的索引如果與迴圈的下標相等則新增到新陣列中
  var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5];
  function rep(arr) {
      var ret = [];
      for (var i = 0; i < arr.length; i++) {
         if (arr.indexOf(arr[i]) == i) {
              ret.push(arr[i]);
          }
      }
     return ret;
 }
 arr2 = rep(arr);
 console.log(arr);
 console.log(arr2);

  //方法五 利用空物件來記錄新陣列中已經儲存過的元素
  var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5];
  var o={};
  var new_arr=[];
  for(var i=0;i<arr.length;i++){
      var k=arr[i];
     if(!o[k]){
         o[k]=true;
         new_arr.push(k);
     }
 }
 console.log(new_arr);

  //方法六 藉助新陣列  判斷新陣列中是否存在該元素如果不存在則將此元素新增到新陣列中
  var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5];
  Array.prototype.reArr = function(){
      var newArr = [];
      for(var i = 0; i < this.length; i++){
         if(newArr.indexOf(this[i])== -1){
              newArr.push(this[i]);
          }
     }
     return newArr;
 }
var arr2 = arr.reArr();
 console.log(arr); //[ 1, 23, 1, 1, 1, 3, 23, 5, 6, 7, 9, 9, 8, 5 ]
 console.log(arr2);//[ 1, 23, 3, 5, 6, 7, 9, 8 ]

  //方法七(原陣列長度不變但被按字串順序排序) 藉助新陣列  判斷新陣列中是否存在該元素如果不存在則將此元素新增到新陣列中
 var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5];
 function removeRepEle(ar) {
      var ret = [],
          end;//臨時變數用於對比重複元素
      ar.sort();//將數重新組排序
      end = ar[0];
      ret.push(ar[0]);
      for (var i = 1; i < ar.length; i++) {
        if (ar[i] != end) {//當前元素如果和臨時元素不等則將此元素新增到新陣列中
             ret.push(ar[i]);
             end = ar[i];
         }
     }
     return ret;
 }
 
 arr2 = removeRepEle(arr);
 console.log(arr);//[ 1, 1, 1, 1, 23, 23, 3, 5, 5, 6, 7, 8, 9, 9 ]
 console.log(arr2);//[ 1, 23, 3, 5, 6, 7, 8, 9 ]

  //方法八(此方法沒有藉助新陣列直接改變原陣列,並且去重後的陣列被排序)
  var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5];
  function removeRepEle(ar) {
      var  end;//臨時變數用於對比重複元素
      ar.sort();//將數重新組排序
      end = ar[0];
     for (var i = 1; i < ar.length; i++) {
        if (ar[i] == end) {//當前元素如果和臨時元素相等則將此元素從陣列中刪除
             ar.splice(i,1);
            i--;
        }else{
            end = ar[i];
        }
     }
     return ar;
 }
 arr2 = removeRepEle(arr);
 console.log(arr); //[ 1, 23, 3, 5, 6, 7, 8, 9 ]
 console.log(arr2);//[ 1, 23, 3, 5, 6, 7, 8, 9 ]

  //方法九(雙層迴圈改變原陣列)
  var arr = [1, 1, 1, 3, 4, 4, 4, 5, 5, 5, 5, 4, 6];
  function removeArrayRepElement(arr){
     for (var i = 0; i < arr.length; i++) {
         for (var j = 0; j < arr.length; j++) {
             if (arr[i] == arr[j] && i != j) {//將後面重複的數刪掉
                 arr.splice(j, 1);
             }
         }
     }
    return arr;
 }
 var arr2  = removeArrayRepElement(arr);
 console.log(arr); //[ 1, 3, 4, 5, 6 ]
 console.log(arr2);//[ 1, 3, 4, 5, 6 ]

//方法十(藉助新陣列)
var arr = [12, 2, 44, 3, 2, 32, 33, -2, 45, 33, 32, 3, 12];
var newArr = [];
for (var i = 0; i < arr.length; i++) {
    var repArr = [];//接收重複資料後面的下標
    //內層迴圈找出有重複資料的下標
    for (var j = i + 1; j < arr.length; j++) {
        if (arr[i] == arr[j]) {
            repArr.push(j);//找出後面重複資料的下標
        }
    }
    //console.log(repArr);
    if (repArr.length == 0) {//若重複陣列沒有值說明其不是重複資料
        newArr.push(arr[i]);
    }
}
console.log(newArr);//[ 44, 2, -2, 45, 33, 32, 3, 12 ]