js数组排序和打乱

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();






转载于:https://juejin.im/post/5b45d663518825196b01c7f6

原文地址:https://www.cnblogs.com/twodog/p/12136485.html