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模拟实现Array的sort方法
Dec 11 Javascript
javascript写的一个链表实现代码
Oct 25 Javascript
zShowBox 图片放大展示jquery版 兼容性
Sep 24 Javascript
Javascript在IE和FireFox中的不同表现简析
Dec 03 Javascript
在服务端(Page.Write)调用自定义的JS方法详解
Aug 09 Javascript
CSS+jQuery实现的一个放大缩小动画效果
Sep 24 Javascript
js四舍五入数学函数round使用实例
May 09 Javascript
jQuery动态创建html元素的常用方法汇总
Sep 05 Javascript
对象转换为原始值的实现方法
Jun 06 Javascript
leaflet的开发入门教程
Nov 17 Javascript
用vue2.0实现点击选中active其他选项互斥的效果
Apr 12 Javascript
详解JavaScript中分解数字的三种方法
Jan 05 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
一个目录遍历函数
2006/10/09 PHP
PHP5.2下preg_replace函数的问题
2015/05/08 PHP
thinkPHP中配置的读取与C方法详解
2016/12/05 PHP
php array_chunk()函数用法与注意事项
2019/07/12 PHP
PHP利用DWZ.CN服务生成短网址
2019/08/11 PHP
让广告代码不再影响你的网页加载速度
2006/07/07 Javascript
JS动态改变表格边框宽度的方法
2015/03/31 Javascript
JS实现CheckBox复选框全选全不选功能
2015/05/06 Javascript
jquery实现网站列表切换效果的2种方法
2016/08/12 Javascript
使用jquery如何获取时间
2016/10/13 Javascript
js中toString()和String()区别详解
2017/03/23 Javascript
利用Vue v-model实现一个自定义的表单组件
2017/04/27 Javascript
Bootstrap Table 在指定列中添加下拉框控件并获取所选值
2017/07/31 Javascript
详解JavaScript中的六种错误类型
2017/09/21 Javascript
vue的diff算法知识点总结
2018/03/29 Javascript
安装vue-cli的简易过程
2018/05/22 Javascript
JS实现将二维数组转为json格式字符串操作示例
2018/07/12 Javascript
JavaScript字符串处理常见操作方法小结
2019/11/15 Javascript
关于angular浏览器兼容性问题的解决方案
2020/07/26 Javascript
vue项目接口域名动态获取操作
2020/08/13 Javascript
[51:15]2014 DOTA2国际邀请赛中国区预选赛 Orenda VS LGD-GAMING
2014/05/22 DOTA
[03:53]2016国际邀请赛中国区预选赛第三日TOP10精彩集锦
2016/06/29 DOTA
在Python中操作时间之mktime()方法的使用教程
2015/05/22 Python
详解基于django实现的webssh简单例子
2018/07/17 Python
python调用opencv实现猫脸检测功能
2019/01/15 Python
python实现微信防撤回神器
2019/04/29 Python
python文字和unicode/ascll相互转换函数及简单加密解密实现代码
2019/08/12 Python
python用类实现文章敏感词的过滤方法示例
2019/10/27 Python
Python tcp传输代码实例解析
2020/03/18 Python
使用HTML5的Canvas绘制曲线的简单方法
2015/09/08 HTML / CSS
英国和爱尔兰最大的地毯零售商:Kukoon
2018/12/17 全球购物
What is view? why do we have view?
2012/06/22 面试题
公安局副政委班子个人对照检查材料
2014/10/04 职场文书
《走遍天下书为侣》教学反思
2016/02/22 职场文书
Python+Appium实现自动抢微信红包
2021/05/21 Python
Python实现归一化算法详情
2022/03/18 Python