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