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

原文地址:https://www.cnblogs.com/younghxp/p/14080726.html