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. Atitit 边缘检测原理attilax总结
  2. Unity 相关经典博客资源总结(持续更新)
  3. php+MySQL+Ajax
  4. BlockingQueue深入分析
  5. scrollTop
  6. list转换成DataTable
  7. react中,constructor和getInitialState的区别
  8. Python获取秒级时间戳与毫秒级时间戳
  9. GDI+ 读取jpg图片每个像素的值
  10. c# Base64解密加密
  11. NOIP-质因数分解
  12. Python基础:七、注释
  13. Spring Cloud Turbine微服务集群实时监控
  14. codeblock字体问题
  15. leetcode297
  16. 【ZooKeeper】ZooKeeper入门流水记
  17. HDU 2511 汉诺塔X
  18. 使用WebClient下载网页,用正则匹配需要的内容
  19. pxc 集群节点被kill -9 了拿什么拯救?
  20. (转)SQL知识_Sql日期时间格式转换

热门文章

  1. SSAS 第一篇:多维数据分析基础
  2. java中OOM错误解析(面试可以聊的东西)
  3. 写日志 使用nnlog
  4. 35 编码 ASCII Unicode UTF-8 ,字符串的编码、io流的编码
  5. networkx学习与攻击转移图可视化
  6. Levenshtein算法-比较两个字符串之间的相似度
  7. 【小学数学】算术口诀 独立音频MP3
  8. C - 剪花布条 (KMP例题)
  9. poi导出word文档,doc和docx
  10. ApiPost V3创事记:一个痛并快乐着的创业故事