zoukankan      html  css  js  c++  java
  • js数组排序和打乱

    js数组根据不同的业务需求,会要求数组有序或者无序,记录一下流传较广,通用性较强的排序和乱序方法。

    数组排序:

    arr.sort(function(a,b){//从小到大

          return a-b;【return b-a;//从大到小】

    });

    乱序数组:

    arr.sort(function(a,b){//一般随机

       return  Math.random() - 0.5;

    });

    先看用到的sort(),sort()方法会调用每个数组项的 toString() 转型方法,原理是基于字符串(字符编码)的比较排序。应用方式:arrayObject.sort(sortby)【sortby:排序方式,函数】,返回原数组的引用,不生成副本。

    排序函数的返回值决定位置:

    若 sortby(a, b) < 0 ,return [a,b];
    若 sortby(a, b) = 0 , return [a,b] or [b,a];
    若 sortby(a, b) > 0 , return [b,a];

    关于数组打乱方法,在网上看到一个更搞笑的处理方法,Fisher–Yates shuffle 洗牌算法

    【https://gaohaoyang.github.io/2016/10/16/shuffle-algorithm/,详细说明的地址】

    if (!Array.prototype.shuffle) {

        Array.prototype.shuffle = function() {

          for(var i = this.length-1;i>=0;i--){

                 var index = Math.floor(Math.random()*(i+1));//重点就是随机下标

                 var arrItem = this[index]; 

                 this[index] = this[i];

                 this[i] = arrItem; 

           } 

           return this; 

        }; 

    }

    arr.shuffle();

    还有一种不太友好的写法

    if (!Array.prototype.shuffle) {

       Array.prototype.shuffle = function() { 

       for(var j, x, i = this.length; i; j = parseInt(Math.random() * i), x = this[--i], this[i] = this[j],    this[j] = x); 

        return this; 

       }; 

    }

    arr.shuffle();






    转载于:https://juejin.im/post/5b45d663518825196b01c7f6

  • 相关阅读:
    中台入门系列1
    微服务 2.0 技术栈选型手册
    mysql计划任务每天定时执行
    更高效地提高redis client多线程操作的并发吞吐设计
    azure之MSSQL服务性能测试
    .NET Socket服务编程之-高效连接接入编
    轻易实现基于linux或win运行的聊天服务端程序
    零配置Socket TCP消息通讯服务容器EC
    azure存储压测的问题(农码主观意识太强被坑了)
    业务逻辑层缓存应该设计
  • 原文地址:https://www.cnblogs.com/twodog/p/12136486.html
Copyright © 2011-2022 走看看