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 tab切换(防止页面刷新)
May 23 Javascript
js 连接数据库如何操作数据库中的数据
Nov 23 Javascript
浅析JavaScript中的delete运算符
Nov 30 Javascript
js清空表单数据的两种方式(遍历+reset)
Jul 18 Javascript
jQuery实现鼠标划过添加和删除class的方法
Jun 26 Javascript
JavaScript正则表达式实例详解
Oct 16 Javascript
Vue2递归组件实现树形菜单
Apr 10 Javascript
JavaScript hasOwnProperty() 函数实例详解
Aug 04 Javascript
webpack4+react多页面架构的实现
Oct 25 Javascript
解决layui批量传值到后台操作时出现传值为空的问题
Sep 28 Javascript
vue实现在v-html的html字符串中绑定事件
Oct 28 Javascript
基于JavaScript的数据结构队列动画实现示例解析
Aug 06 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类
2006/10/09 PHP
浅谈PHP解析URL函数parse_url和parse_str
2014/11/11 PHP
PHP实现链式操作的三种方法详解
2017/11/16 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
2020/04/04 PHP
javascript中的关于类型转换的性能优化
2010/12/14 Javascript
Javascript面向对象之四 继承
2011/02/08 Javascript
让js弹出窗口居前显示的实现方法
2013/07/10 Javascript
js实现身份证号码验证的简单实例
2014/02/19 Javascript
jQuery实现异步获取json数据的2种方式
2014/08/29 Javascript
JavaScript实现将数组中所有元素连接成一个字符串的方法
2015/04/06 Javascript
javascript为按钮注册回车事件(设置默认按钮)的方法
2015/05/09 Javascript
浅谈jquery中delegate()与live()
2015/06/22 Javascript
基于JS实现数字+字母+中文的混合排序方法
2016/06/06 Javascript
JavaScript面试题(指针、帽子和女朋友)
2016/11/23 Javascript
jQuery插件zTree实现获取一级节点数据的方法
2017/03/08 Javascript
关于jQuery中fade(),show()起始位置的一点小发现
2017/04/25 jQuery
利用CDN加速react webpack打包后的文件详解
2018/02/22 Javascript
layui form表单提交后实现自动刷新
2019/10/25 Javascript
Python实现快速多线程ping的方法
2015/07/15 Python
浅谈python中requests模块导入的问题
2018/05/18 Python
Python实现正整数分解质因数操作示例
2018/08/01 Python
python实现自动登录
2018/09/17 Python
Python3实现的反转单链表算法示例
2019/03/08 Python
使用python写一个自动浏览文章的脚本实例
2019/12/05 Python
Python文件读写w+和r+区别解析
2020/03/26 Python
Python tkinter制作单机五子棋游戏
2020/09/14 Python
营销与策划专业毕业生求职信
2013/11/01 职场文书
大学生自我鉴定评语
2014/01/27 职场文书
《画风》教学反思
2014/04/16 职场文书
保护环境标语
2014/06/09 职场文书
教师个人发展总结
2015/02/11 职场文书
民主评议教师党员自我评价
2015/03/04 职场文书
施工安全员岗位职责
2015/04/11 职场文书
2016教师廉洁教育心得体会
2016/01/13 职场文书
教你如何用Python实现人脸识别(含源代码)
2021/06/23 Python
Java实现聊天机器人完善版
2021/07/04 Java/Android