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

  • 相关阅读:
    (转) tcp的注册端口
    [转] Android中C&C++源码库的初步研究
    (转)vim7.3中文乱码解决方法
    {转} Eclipse 高亮显示选中的相同变量
    libcurl 一个实现了client请求http,ftp的库
    c#操作文件夹
    OutputCache祥解
    非静态的字段、方法或属性“System.Web.UI.Page.ClientScript.get”要求对象引用
    IXMLDOMDocument 成員
    关于中日文和UNICODE之间编码的转换(2008725 15:05:00)
  • 原文地址:https://www.cnblogs.com/twodog/p/12136488.html
Copyright © 2011-2022 走看看