JavaScript实现shuffle数组洗牌操作示例


Posted in Javascript onJanuary 03, 2019

本文实例讲述了JavaScript实现shuffle数组洗牌操作。分享给大家供大家参考,具体如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>JavaScript shuffle数组洗牌</title>
<body>
<script>
function createArray(max) {
  const arr = [];
  for(let i = 0; i < max; i++) {
    arr.push(i);
  }
  return arr;
}
function shuffleSort(arr) {
  arr.sort(()=> {
    //返回值大于0,表示需要交换;小于等于0表示不需要交换
    return Math.random() > .5 ? -1 : 1;
  });
  return arr;
}
function shuffleSwap(arr) {
  if(arr.length == 1) return arr;
  //正向思路
//  for(let i = 0, n = arr.length; i < arr.length - 1; i++, n--) {
//    let j = i + Math.floor(Math.random() * n);
  //逆向思路
  let i = arr.length;
  while(--i > 1) {
    //Math.floor 和 parseInt 和 >>>0 和 ~~ 效果一样都是取整
    let j = Math.floor(Math.random() * (i+1));
    /*
    //原始写法
    let tmp = arr[i];
    arr[i] = arr[j];
    arr[j] = tmp;
    */
    //es6的写法
    [arr[i], arr[j]] = [arr[j], arr[i]];
  }
  return arr;
}
function wrap(fn, max) {
  const startTime = new Date().getTime();
  const arr = createArray(max);
  const result = fn(arr);
  const endTime = new Date().getTime();
  const cost = endTime - startTime;
  console.log(arr);
  console.log("cost : " + cost);
}
wrap(shuffleSort, 1000);
wrap(shuffleSwap, 1000);//试验证明这种方法比第一种效率高多了
</script>
</body>
</html>

这里使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码,可得如下运行结果:

JavaScript实现shuffle数组洗牌操作示例

更多关于JavaScript相关内容还可查看本站专题:《JavaScript数组操作技巧总结》、《JavaScript字符与字符串操作技巧总结》、《JavaScript遍历算法与技巧总结》、《JavaScript排序算法总结》、《JavaScript查找算法技巧总结》、《JavaScript数学运算用法总结》、《JavaScript数据结构与算法技巧总结》及《JavaScript错误与调试技巧总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
.net,js捕捉文本框回车键事件的小例子(兼容多浏览器)
Mar 11 Javascript
JavaScript创建一个object对象并操作对象属性的用法
Mar 23 Javascript
javascript背景时钟实现方法
Jun 18 Javascript
JS根据key值获取URL中的参数值及把URL的参数转换成json对象
Aug 26 Javascript
JS实现的自定义显示加载等待图片插件(loading.gif)
Jun 17 Javascript
JS jQuery使用正则表达式去空字符的简单实现代码
May 20 jQuery
除Console.log()外更多的Javascript调试命令
Jan 24 Javascript
nvm、nrm、npm 安装和使用详解(小结)
Jan 17 Javascript
javascript实现小型区块链功能
Apr 03 Javascript
30分钟用Node.js构建一个API服务器的步骤详解
May 24 Javascript
解决Layui数据表格显示无数据提示的问题
Nov 14 Javascript
JS实现公告上线滚动效果
Jan 10 Javascript
JavaScript实现数字前补“0”的五种方法示例
Jan 03 #Javascript
35个最好用的Vue开源库(史上最全)
Jan 03 #Javascript
原生js实现移动端Touch轮播图的方法步骤
Jan 03 #Javascript
发布一款npm包帮助理解npm的使用
Jan 03 #Javascript
用node开发并发布一个cli工具的方法步骤
Jan 03 #Javascript
详解Vue基于vue-quill-editor富文本编辑器使用心得
Jan 03 #Javascript
Vue2 添加数据可视化支持的方法步骤
Jan 02 #Javascript
You might like
phpmyadmin中配置文件现在需要绝密的短语密码的解决方法
2007/02/11 PHP
ThinkPHP有变量的where条件分页实例
2014/11/03 PHP
微信公众号开发之语音消息识别php代码
2016/08/08 PHP
Javascript 学习笔记 错误处理
2009/07/30 Javascript
屏蔽F1~F12的快捷键的js函数
2010/05/06 Javascript
js onload事件不起作用示例分析
2013/10/09 Javascript
jquery map方法使用示例
2014/04/23 Javascript
JS实现漂亮的淡蓝色滑动门效果代码
2015/09/23 Javascript
JS对象创建的几种方式整理
2017/02/28 Javascript
nodejs mysql 实现分页的方法
2017/06/06 NodeJs
深入理解vue2.0路由如何配置问题
2017/07/18 Javascript
利用百度地图API获取当前位置信息的实例
2017/11/06 Javascript
vue单页面打包文件大?首次加载慢?nginx带你飞,从7.5M到1.3M蜕变过程(推荐)
2018/01/16 Javascript
vue如何安装使用Quill富文本编辑器
2018/09/21 Javascript
Python Mysql数据库操作 Perl操作Mysql数据库
2009/01/12 Python
Python中使用tarfile压缩、解压tar归档文件示例
2015/04/05 Python
浅谈Python 的枚举 Enum
2017/06/12 Python
Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法
2018/01/11 Python
利用python如何在前程无忧高效投递简历
2019/05/07 Python
python requests使用socks5的例子
2019/07/25 Python
python excel转换csv代码实例
2019/08/26 Python
numpy ndarray 取出满足特定条件的某些行实例
2019/12/05 Python
pandas 中对特征进行硬编码和onehot编码的实现
2019/12/20 Python
Python2与Python3关于字符串编码处理的差别总结
2020/09/07 Python
使用HTML5的Notification API制作web通知的教程
2015/05/08 HTML / CSS
HTML5到底会有什么发展?HTML5的前景展望
2015/07/07 HTML / CSS
HTML5拖放API实现自动生成相框功能
2020/04/07 HTML / CSS
如何唤起类中的一个方法
2013/11/29 面试题
幼儿园长自我鉴定
2013/10/17 职场文书
材料专业毕业生求职信
2014/02/26 职场文书
大学校务公开实施方案
2014/03/31 职场文书
学用政策心得体会
2014/09/10 职场文书
2015年幼儿园新年寄语
2014/12/08 职场文书
会计求职自荐信范文
2015/03/04 职场文书
k8s部署redis cluster集群的实现
2021/06/24 Redis
python绘制云雨图raincloud plot
2022/08/05 Python