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 相关文章推荐
jquery indexOf使用方法
Aug 19 Javascript
js表头排序实现方法
Jan 16 Javascript
快速学习jQuery插件 Form表单插件使用方法
Dec 01 Javascript
使用jQuery给input标签设置默认值
Jun 20 Javascript
jQuery中ajax错误调试分析
Dec 01 Javascript
如何选择jQuery版本 1.x? 2.x? 3.x?
Apr 01 jQuery
vue中使用element-ui进行表单验证的实例代码
Jun 22 Javascript
vue.js实现的全选与全不选功能示例【基于elementui】
Dec 03 Javascript
express启用https使用小记
May 21 Javascript
解决layer.open弹出框不能获取input框的值为空的问题
Sep 10 Javascript
vuex存储复杂参数(如对象数组等)刷新数据丢失的解决方法
Nov 05 Javascript
解决vue项目router切换太慢问题
Jul 19 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下保存远程图片到本地的办法
2010/08/08 PHP
yii2中使用Active Record模式的方法
2016/01/09 PHP
PHP封装的非对称加密RSA算法示例
2018/05/28 PHP
Jquery easyUI 更新行示例
2014/03/06 Javascript
使用jQuery重置(reset)表单的方法
2014/05/05 Javascript
使用node.js半年来总结的 10 条经验
2014/08/18 Javascript
分享一个自己动手写的jQuery分页插件
2014/08/28 Javascript
JS输入用户名自动显示邮箱后缀列表的方法
2015/01/27 Javascript
js随机生成字母数字组合的字符串 随机动画数字
2015/09/02 Javascript
js 中文汉字转Unicode、Unicode转中文汉字、ASCII转换Unicode、Unicode转换ASCII、中文转换
2016/12/06 Javascript
jQueryUI 拖放排序遇到滚动条时有可能无法执行排序的小bug及解决方案
2016/12/19 Javascript
Bootstrap下拉菜单样式
2017/02/07 Javascript
利用webstrom调试Vue.js单页面程序的方法教程
2017/06/06 Javascript
微信小程序项目实践之验证码倒计时功能
2018/07/18 Javascript
解决微信小程序中的滚动穿透问题
2019/09/16 Javascript
js实现自动播放匀速轮播图
2020/02/06 Javascript
vue引入静态js文件的方法
2020/06/20 Javascript
[48:51]完美世界DOTA2联赛PWL S2 Magma vs InkIce 第一场 11.28
2020/12/02 DOTA
python抓取最新博客内容并生成Rss
2015/05/17 Python
django 解决manage.py migrate无效的问题
2018/05/27 Python
Django框架之DRF 基于mixins来封装的视图详解
2019/07/23 Python
对Django 中request.get和request.post的区别详解
2019/08/12 Python
python使用ctypes调用扩展模块的实例方法
2020/01/28 Python
如何使用python代码操作git代码
2020/02/29 Python
Python tornado上传文件的功能
2020/03/26 Python
使用python tkinter开发一个爬取B站直播弹幕工具的实现代码
2021/02/07 Python
德国亚洲食品网上商店:asiafoodland.de
2019/12/28 全球购物
广州地球村科技数据库题目
2016/04/25 面试题
介绍一下linux的文件系统
2015/10/06 面试题
大学在校生求职信范文
2013/11/21 职场文书
市场营销专业毕业生求职信
2014/03/26 职场文书
市委常委班子党的群众路线教育实践活动整改措施
2014/10/02 职场文书
贪污检举信范文
2015/03/02 职场文书
2015年度服装销售工作总结
2015/03/31 职场文书
因身体原因离职的辞职信范文
2015/05/12 职场文书
javaScript Array api梳理
2021/03/31 Javascript