js陣列排序和打亂

蒲絨絨的帽子發表於2018-07-12

js陣列根據不同的業務需求,會要求陣列有序或者無序,記錄一下流傳較廣,通用性較強的排序和亂序方法。

陣列排序:

arr.sort(function(a,b){//從小到大

      return a-b;【return b-a;//從大到小】

});

亂序陣列:

arr.sort(function(a,b){//一般隨機

   return  Math.random() - 0.5;

});

先看用到的sort(),sort()方法會呼叫每個陣列項的 toString() 轉型方法,原理是基於字串(字元編碼)的比較排序。應用方式:arrayObject.sort(sortby)【sortby:排序方式,函式】,返回原陣列的引用,不生成副本。

排序函式的返回值決定位置:

若 sortby(a, b) < 0 ,return [a,b];
若 sortby(a, b) = 0 , return [a,b] or [b,a];
若 sortby(a, b) > 0 , return [b,a];

關於陣列打亂方法,在網上看到一個更搞笑的處理方法,Fisher–Yates shuffle 洗牌演算法

【https://gaohaoyang.github.io/2016/10/16/shuffle-algorithm/,詳細說明的地址】

if (!Array.prototype.shuffle) {

    Array.prototype.shuffle = function() {

      for(var i = this.length-1;i>=0;i--){

             var index = Math.floor(Math.random()*(i+1));//重點就是隨機下標

             var arrItem = this[index]; 

             this[index] = this[i];

             this[i] = arrItem; 

       } 

       return this; 

    }; 

}

arr.shuffle();

還有一種不太友好的寫法

if (!Array.prototype.shuffle) {

   Array.prototype.shuffle = function() { 

   for(var j, x, i = this.length; i; j = parseInt(Math.random() * i), x = this[--i], this[i] = this[j],    this[j] = x); 

    return this; 

   }; 

}

arr.shuffle();






相關文章