Js數組去重方法總結


 1 //方法一
 2 var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5];
 3 function removeDuplicatedItem(arr) {
 4    for(var i = 0; i < arr.length-1; i++){
 5        for(var j = i+1; j < arr.length; j++){
 6            if(arr[i]==arr[j]){
 7
8 arr.splice(j,1);//console.log(arr[j]);
9 j--;
10  } 11  } 12  } 13 return arr; 14 } 15 16 arr2 = removeDuplicatedItem(arr); 17 console.log(arr); 18 console.log(arr2);
 1 //方法二
 2 //借助indexOf()方法判斷此元素在該數組中首次出現的位置下標與循環的下標是否相等
 3 var ar = [1,23,1,1,1,3,23,5,6,7,9,9,8,5];
 4 function rep2(arr) {
 5     for (var i = 0; i < arr.length; i++) {
 6         if (arr.indexOf(arr[i]) != i) {
 7             arr.splice(i,1);//刪除數組元素后數組長度減1后面的元素前移
 8             i--;//數組下標回退
 9         }
10     }
11     return arr;
12 }
13 var a1 = rep2(ar);
14 console.log(ar);
15 console.log(a1);
1  //方法三  利用數組中的filter方法
2  var arr = ['apple','strawberry','banana','pear','apple','orange','orange','strawberry'];
3  var r = arr.filter(function(element,index,self){
4     return self.indexOf(element) === index;
5  });
6  console.log(r);
 1 //方法四  借助新數組 通過indexOf方判斷當前元素在數組中的索引如果與循環的下標相等則添加到新數組中
 2 var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5];
 3 function rep(arr) {
 4     var ret = [];
 5     for (var i = 0; i < arr.length; i++) {
 6         if (arr.indexOf(arr[i]) == i) {
 7             ret.push(arr[i]);
 8         }
 9     }
10     return ret;
11 }
12 arr2 = rep(arr);
13 console.log(arr);
14 console.log(arr2);
 1 //方法五 利用空對象來記錄新數組中已經存儲過的元素
 2 var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5];
 3 var o={};
 4 var new_arr=[];
 5 for(var i=0;i<arr.length;i++){
 6     var k=arr[i];
 7     if(!o[k]){
 8         o[k]=true;
 9         new_arr.push(k);
10     }
11 }
12 console.log(new_arr);
 1 //方法六 借助新數組  判斷新數組中是否存在該元素如果不存在則將此元素添加到新數組中
 2 var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5];
 3 Array.prototype.reArr = function(){
 4     var newArr = [];
 5     for(var i = 0; i < this.length; i++){
 6         if(newArr.indexOf(this[i])== -1){
 7             newArr.push(this[i]);
 8         }
 9     }
10     return newArr;
11 }
12 var arr2 = arr.reArr();
13 console.log(arr); //[ 1, 23, 1, 1, 1, 3, 23, 5, 6, 7, 9, 9, 8, 5 ]
14 console.log(arr2);//[ 1, 23, 3, 5, 6, 7, 9, 8 ]
 1 //方法七(原數組長度不變但被按字符串順序排序) 借助新數組  判斷新數組中是否存在該元素如果不存在則將此元素添加到新數組中
 2 var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5];
 3 function removeRepEle(ar) {
 4     var ret = [],
 5         end;//臨時變量用於對比重復元素
 6     ar.sort();//將數重新組排序
 7     end = ar[0];
 8     ret.push(ar[0]);
 9     for (var i = 1; i < ar.length; i++) {
10         if (ar[i] != end) {//當前元素如果和臨時元素不等則將此元素添加到新數組中
11             ret.push(ar[i]);
12             end = ar[i];
13         }
14     }
15     return ret;
16 }
17 
18 arr2 = removeRepEle(arr);
19 console.log(arr);//[ 1, 1, 1, 1, 23, 23, 3, 5, 5, 6, 7, 8, 9, 9 ]
20 console.log(arr2);//[ 1, 23, 3, 5, 6, 7, 8, 9 ]
 1 //方法八(此方法沒有借助新數組直接改變原數組,並且去重后的數組被排序)
 2 var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5];
 3 function removeRepEle(ar) {
 4     var  end;//臨時變量用於對比重復元素
 5     ar.sort();//將數重新組排序
 6     end = ar[0];
 7     for (var i = 1; i < ar.length; i++) {
 8         if (ar[i] == end) {//當前元素如果和臨時元素相等則將此元素從數組中刪除
 9             ar.splice(i,1);
10             i--;
11         }else{
12             end = ar[i];
13         }
14     }
15     return ar;
16 }
17 arr2 = removeRepEle(arr);
18 console.log(arr); //[ 1, 23, 3, 5, 6, 7, 8, 9 ]
19 console.log(arr2);//[ 1, 23, 3, 5, 6, 7, 8, 9 ]
 1 //方法九(雙層循環改變原數組)
 2 var arr = [1, 1, 1, 3, 4, 4, 4, 5, 5, 5, 5, 4, 6];
 3 function removeArrayRepElement(arr){
 4     for (var i = 0; i < arr.length; i++) {
 5         for (var j = 0; j < arr.length; j++) {
 6             if (arr[i] == arr[j] && i != j) {//將后面重復的數刪掉
 7                 arr.splice(j, 1);
 8             }
 9         }
10     }
11     return arr;
12 }
13 var arr2  = removeArrayRepElement(arr);
14 console.log(arr); //[ 1, 3, 4, 5, 6 ]
15 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 ]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM