JS數組sort方法與隨機排序


一、JS數組sort方法

// 升序
return a - b;
// 倒序
return b - a;
var arr = [2,34,242,12,3,2,23,3];// 定義一個數組 arr.sort(function (a,b) { // a -->代表每一次執行匿名函時候,找到的數組中的當前項; // b -->代表當前項的后一項; return a - b; // 升序時: 如果a>b,那么返回的值>0,a和b交換位置; return b - a; // 降序時: 如果b>a,那么返回的值>0,a和b交換位置; //-> 原理:return的值可能是一個大於0的數也或者可能是小於等於0的數,如果return后的值大於0則讓數組a和b交換一下位置;小於等於0,則原來數組中的位置不變; return 1; // 表示不管a和b誰大,每一次都返回一個恆大於0的數,也就是說每一次a和b都要交換位置,最后的結果就是原有數組倒過來排列了,相當於數組的reverse()方法; })

按照Unicode編碼排序。

sort(compare)原理描述:

可選參數compare需為函數,sort函數使用compare函數比較數組中的兩個元素,因此,compare函數需要兩個參數—compare(a,b)。
當compare函數返回任何大於0的值時,它將使第1個參數的索引值小於第2個參數的索引值
當compare函數返回任何小於0的值時,它將使第2個參數的索引值小於第1個參數的索引值

理解:

sort()方法在比較時,其內部邏輯是如此的:從數組內索引值為0和1的參數開始比較(即參數a和b),比較結果沒有變動的話,繼續比較索引值1和2的,如果結果有變化,變換兩者的位置(索引值),並判斷之前有無其他參數,如果有的話則會對參數a和a之前的參數進行比較。如果沒有則用參數b與索引值+1的參數比較。遵循此邏輯重復循環操作,完成排序。

元素為對象:
  var items = [
      { name: "Edward", age: 21 },
      { name: "Sharpe", age: 37 },
      { name: "And", age: 45 },
      { name: "The", age: -12 },
      { name: "Magnetic", age: 0 },
      { name: "Zeros", age: 37 },
  ];
  items.sort((a, b) => {
      return a.age - b.age;
  });
  console.log(items);

二、數組隨機排序

1、sort隨機排序(Array.prototype.sort 隨機排序,結果並不均勻,並不完全隨機)

function randomsort(a, b) {
  return Math.random()>.5 ? -1 : 1; //通過隨機產生0到1的數,然后判斷是否大於0.5從而影響排序,產生隨機性的效果。
}
var arr = [1, 2, 3, 4, 5];
arr.sort(randomsort);

2、經典隨機排序

1.
function shuffle(arr){
  var len = arr.length;
  for(var i = 0; i < len - 1; i++){
    var idx = Math.floor(Math.random() * (len - i));
    var temp = arr[idx];
    arr[idx] = arr[len - i - 1];
    arr[len - i -1] = temp;
  }
  return arr;
}

2.
var arr =[1,2,3,4];
var t;
for(var i = 0;i < arr.length; i++){
 var rand = parseInt(Math.random()*arr.length);
   t = arr[rand];
   arr[rand] =arr[i];
   arr[i] = t;
}
console.log(arr);

 參考:https://blog.csdn.net/u013680938/article/details/51487112


免責聲明!

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



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