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获取变量
Aug 24 Javascript
jquery focus(fn),blur(fn)方法实例代码
Dec 16 Javascript
一个JS的日期格式化算法示例
Jul 31 Javascript
在linux中使用包管理器安装node.js
Mar 13 Javascript
基于jQuery下拉选择框插件支持单选多选功能代码
Jun 07 Javascript
用jmSlip编写移动端顶部日历选择控件
Oct 24 Javascript
localStorage实现便签小程序
Nov 28 Javascript
Vue.js基础指令实例讲解(各种数据绑定、表单渲染大总结)
Jul 03 Javascript
Node.js中,在cmd界面,进入退出Node.js运行环境的方法
May 12 Javascript
微信小程序收货地址API兼容低版本解决方法
May 18 Javascript
vue分页器组件编写方法详解
Jun 28 Javascript
JavaScript+HTML实现学生信息管理系统
Apr 20 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中的常用函数回顾
2013/07/11 PHP
php格式化电话号码的方法
2015/04/24 PHP
php生成条形码的图片的实例详解
2017/09/13 PHP
PHP实现使用DOM将XML数据存入数组的方法示例
2017/09/27 PHP
PHP单元测试框架PHPUnit用法详解
2019/01/23 PHP
php传值和传引用的区别点总结
2019/11/19 PHP
Laravel5.1 框架控制器基础用法实例分析
2020/01/04 PHP
javascript编程起步(第二课)
2007/01/10 Javascript
网页源代码保护(禁止右键、复制、另存为、查看源文件)
2012/05/23 Javascript
jQuery之过滤元素操作小结
2013/11/30 Javascript
Javascript前端UI框架Kit使用指南之Kitjs简介
2014/11/28 Javascript
jQuery插件扩展extend的简单实现原理
2016/06/24 Javascript
AngularJS基础 ng-options 指令详解
2016/08/02 Javascript
Vue.js数据绑定之data属性
2017/07/07 Javascript
Vue列表页渲染优化详解
2017/07/24 Javascript
AngularJs ng-change事件/指令的用法小结
2017/11/01 Javascript
vue 中swiper的使用教程
2018/05/22 Javascript
Nodejs Express 通过log4js写日志到Logstash(ELK)
2018/08/30 NodeJs
layui 数据表格复选框实现单选功能的例子
2019/09/19 Javascript
vue 实现购物车总价计算
2019/11/06 Javascript
Python守护进程(daemon)代码实例
2015/03/06 Python
python 实现的发送邮件模板【普通邮件、带附件、带图片邮件】
2019/07/06 Python
在Python中预先初始化列表内容和长度的实现
2019/11/28 Python
基于python实现语音录入识别代码实例
2020/01/17 Python
tensorflow 变长序列存储实例
2020/01/20 Python
去除python中的字符串空格的简单方法
2020/12/22 Python
完美解决IE8下不兼容rgba()的问题
2017/03/31 HTML / CSS
canvas实现滑动验证的实现示例
2020/08/11 HTML / CSS
HTML5输入框下拉菜单功能的示例代码
2020/09/08 HTML / CSS
Lancome兰蔻官方旗舰店:来自法国的世界知名美妆品牌
2018/06/14 全球购物
世界经理人咨询有限公司面试
2014/09/23 面试题
教师群众路线教育实践活动学习笔记
2014/11/05 职场文书
军事博物馆观后感
2015/06/05 职场文书
2015年中秋寄语
2015/07/31 职场文书
Python快速实现一键抠图功能的全过程
2021/06/29 Python
go goth封装第三方认证库示例详解
2022/08/14 Golang