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 相关文章推荐
js的表单操作 简单计算器
Dec 29 Javascript
Javascript实现重力弹跳拖拽运动效果示例
Jun 28 Javascript
中止javascript执行的方法
Feb 14 Javascript
javascript父、子页面交互技巧总结
Aug 08 Javascript
javascript实现验证IP地址等相关信息代码
May 10 Javascript
jQuery无刷新上传之uploadify3.1简单使用
Jun 18 Javascript
jQuery获取select选中的option的value值实现方法
Aug 29 Javascript
js仿微信语音播放实现思路
Dec 12 Javascript
详解angularjs4部署文件过大解决过程
Dec 05 Javascript
微信小程序学习笔记之表单提交与PHP后台数据交互处理图文详解
Mar 28 Javascript
详解jenkins自动化部署vue
May 14 Javascript
javascript拖曳互换div的位置实现示例
Jun 28 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
新手配置 PHP 调试环境(IIS+PHP+MYSQL)
2007/01/10 PHP
Thinkphp中数据按分类嵌套循环实现方法
2014/10/30 PHP
php将access数据库转换到mysql数据库的方法
2014/12/24 PHP
PHP判断json格式是否正确的实现代码
2017/09/20 PHP
常用的JavaScript验证正则表达式汇总
2013/11/26 Javascript
js解析json读取List中的实体对象示例
2014/03/11 Javascript
Jquery焦点与失去焦点示例应用
2014/06/10 Javascript
JSONP跨域GET请求解决Ajax跨域访问问题
2014/12/31 Javascript
详解javascript事件冒泡
2016/01/09 Javascript
jQuery实现的倒计时效果实例小结
2016/04/16 Javascript
Vue.js基础知识汇总
2016/04/27 Javascript
js小数计算小数点后显示多位小数的实现方法
2016/05/30 Javascript
从零开始学习Node.js系列教程之基于connect和express框架的多页面实现数学运算示例
2017/04/13 Javascript
Vue 路由切换时页面内容没有重新加载的解决方法
2018/09/01 Javascript
微信小程序模板template简单用法示例
2018/12/04 Javascript
ant-design-vue中的select选择器,对输入值的进行筛选操作
2020/10/24 Javascript
原生js拖拽功能制作滑动条实例代码
2021/02/05 Javascript
[01:51]2018年度CS GO最具人气外援-完美盛典
2018/12/16 DOTA
python实现简单的计时器功能函数
2015/03/14 Python
Python的Django框架中forms表单类的使用方法详解
2016/06/21 Python
python 自定义装饰器实例详解
2019/07/20 Python
TensorFlow2.1.0安装过程中setuptools、wrapt等相关错误指南
2020/04/08 Python
使用Nibabel库对nii格式图像的读写操作
2020/07/01 Python
Python基于template实现字符串替换
2020/11/27 Python
CSS3制作精致的照片墙特效
2016/06/07 HTML / CSS
意大利奢侈品购物网站:Giglio
2018/01/05 全球购物
英国旅行箱包和行李箱购物网站:Travel Luggage & Cabin Bags
2019/08/26 全球购物
波兰家居饰品和厨房配件网上商店:Maleomi
2020/12/15 全球购物
PHP面试题大全
2015/10/16 面试题
2014年自我评价
2014/01/04 职场文书
2015年采购部工作总结
2015/04/23 职场文书
入党群众意见范文
2015/06/02 职场文书
简爱读书笔记
2015/06/26 职场文书
开业庆典嘉宾致辞
2015/08/01 职场文书
教师旷工检讨书
2015/08/15 职场文书
实现GO语言对数组切片去重
2022/04/20 Golang