• 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

  • 相关阅读:
    相机标定 和 单应性矩阵H
    全景视频拼接关键技术
    OpenCV图像变换(仿射变换与透视变换)
    用非数学语言讲解贝叶斯定理
    (二)SMO算法
    (一)SVM原理
    什么是赋范线性空间、内积空间,度量空间,希尔伯特空间
    决策树算法(五)——处理一些特殊的分类
    V8学习资源
    perforce 学习资源
  • 原文地址:https://www.cnblogs.com/younghxp/p/14080726.html
Copyright © 2020-2023  润新知