一、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