js數組去重,排序的幾種方法


 

去重:

1,arr.splice

var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5,5,5,5];

function norepeat(arr) {

  var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5,5,5,5];
  function norepeat(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);
              j--;
            }
          }
      }
    return arr;
  }
var arr2 = norepeat(arr);
console.log(arr2); //[1, 23, 3, 5, 6, 7, 9, 8]

}
var arr2 = norepeat(arr);
console.log(arr2); //[1, 23, 3, 5, 6, 7, 9, 8]

2,  .借助新數組,判斷新數組中是否存在該元素如果不存在則將此元素添加到新數組中(原數組長度不變但被按字符串順序排序)

   var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5];
        console.log(arr); 
        function norepeat(arr){
            var temp=[];
            var end;       //臨時變量用於對比重復元素
            arr.sort();
            end=arr[0];
            temp.push(arr[0]);
            for(var i=1;i<arr.length;i++){
                if(arr[i] !=end){   //當前元素如果和臨時元素不等則將此元素添加到新數組中
                    temp.push(arr[i])
                    end=arr[i]
                }
            }
            return temp;
        }
    var arr2=norepeat(arr);
    console.log(arr2);   //[1, 23, 3, 5, 6, 7, 8, 9]
3, 創建一個新數組,判斷新數組中是否存在該元素如果不存在則將此元素添加到新數組中
 var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5];
        console.log(arr); 
        function norepeat(arr){
            var temp =[];
            for(var i=0;i<arr.length;i++){
                if(temp.indexOf(arr[i]) == -1){
                    temp.push(arr[i]);
                }
            }
            return temp;
        }
    var arr2=norepeat(arr);
    console.log(arr2);//[1, 23, 3, 5, 6, 7, 9, 8]
4, 借助indexOf()方法判斷此元素在該數組中首次出現的位置下標與循環的下標是否相等
 var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5,5,5];
   console.log(arr);    
   function norepeat(arr) {
       for (var i = 0; i < arr.length; i++) {
           if (arr.indexOf(arr[i]) != i) {
               arr.splice(i,1);//刪除數組元素后數組長度減1后面的元素前移
               i--;//數組下標回退
           }
       }
       return arr;
   }
   var arr2 = norepeat(arr);
   console.log(arr2);                 //[1, 23, 3, 5, 6, 7, 9, 8]
5, 利用數組中的filter方法
 var arr = ["apple","banana","pear","apple","orange","orange"];
   console.log(arr);
   var arr2 =arr.filter(function(value,index,self){
       return self.indexOf(value) ===index;
   });
   console.log(arr2);   //["apple", "banana", "pear", "orange"]

排序:

sort,for循環嵌套,比較交換位置

urn b-a})//降序

如上,使用數字對數組進行排序,就需要通過一個函數作為參數來調用。

對象數組:

使用場景——已知某品牌門店列表數據(含距當前位置的距離),需要按距離由僅及遠排序,具體實現方法如下:

復制代碼
var shoplist = [{
  "name": "上塘中海錦城",
  "distance": 14307.0275
}, {
  "name": "漢堡王深圳華強北店",
  "distance": 16606.5901
}, {
  "name": "漢堡王深圳蔡屋圍店",
  "distance": 18062.4395
}, {
  "name": "漢堡王深圳金豐城店",
  "distance": 18468.4439
}, {
  "name": "漢堡王深圳地王店",
  "distance": 18484.8283
}, {
  "name": "漢堡王深圳龍崗寶能店",
  "distance": 39006.9269
}, {
  "name": "漢堡王深圳龍華綠景香頌店",
  "distance": 15356.4863
}, {
  "name": "漢堡王深圳西薈城店",
  "distance": 24990.1325
}, {
  "name": "漢堡王深圳魅力時代店",
  "distance": 8228.8474
}, {
  "name": "漢堡王深圳福華三路店",
  "distance": 12693.439
}]
shoplist.sort((a, b) => {
  return a.distance - b.distance
})
復制代碼

如上,關鍵代碼就一句: 

shoplist.sort((a,b)=>{return a.distance-b.distance})

簡單分析不難發現,這跟上面數字數組排序用法是一樣的,只不過是這里使用了數組中對象元素的 distance 這一數字字段進行比較排序的。

經過排序后的數據如下圖,門店列表已經按距離字段進行升序排列,根據這些排序后的數據進行展示就OK了:

反序排序:

與上面排序不同,反轉排序方法 reverse() 將一個數組中的元素的順序反轉排序。

這個方法單獨使用的場景不多,但是結合sort()排序方法使用的場景比較多一些,特別是對於一些復雜的數組。

如網上商城商品搜索列表頁面的正序、反序,有根據價格的,有根據銷量的,還有根據評價的,如果單單是正序,或者是排序,那么直接用sort()方法就好了。但如果正序排序之后又需要進行反序排列,那么直接用reverse()進行反轉就OK了,沒必要再用sort()進行反序排列,無論是在寫法上,還是計算速度上都要快好多的:

//1. sort()進行反序
shoplist.sort((a,b)=>{return b.distance-a.distance})
//2. reverse()反序
shoplist.reverse()


免責聲明!

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



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