打乱数组顺序的三种方法

简介: 打乱数组顺序的三种方法

可以用sort排序方法

利用sort用法:arr.sort(compareFunction)

如果 compareFunction(a,b) 返回的值大于 0 ,则 b 在 a 的前边;

如果 compareFunction(a,b) 返回的值等于 0 ,则a 、b 位置保持不变;

如果 compareFunction(a,b) 返回的值小于 0 ,则 a 在 b 的前边。

let arr = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16];
arr.sort(() => Math.random() - 0.5);
//[2, 8, 3, 15, 6, 5, 14, 1, 9, 0, 11, 10, 16, 12, 13, 4, 7]
//[13, 12, 8, 2, 4, 11, 5, 0, 6, 10, 1, 15, 9, 7, 14, 3, 16]
//[8, 3, 13, 12, 4, 6, 7, 9, 11, 10, 16, 5, 2, 15, 1, 14, 0]
//[12, 0, 2, 7, 11, 10, 1, 16, 5, 6, 9, 3, 14, 8, 13, 4, 15]

当然了 这个排序是有缺陷的 换了种 可以来看看

let arr = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16];
function shuffle(arr) {
    let i = arr.length;
    while (i) {
        let j = Math.floor(Math.random() * i--);
        [arr[j], arr[i]] = [arr[i], arr[j]];
    }
    return arr;
}
shuffle(arr);
//[5, 14, 15, 8, 12, 13, 16, 2, 4, 7, 10, 6, 1, 11, 0, 9, 3]
//[0, 13, 3, 15, 4, 9, 14, 1, 7, 10, 2, 5, 11, 8, 12, 16, 6]
//[9, 13, 7, 11, 15, 5, 1, 6, 3, 16, 0, 10, 2, 12, 4, 8, 14]
//[12, 11, 3, 16, 1, 2, 7, 10, 9, 14, 6, 5, 4, 8, 15, 0, 13]

循环随机 交换法

循环遍历该数组,在每次遍历中产生一个0 ~ length - 1的数,该数代表本次循环要随机交换的位置。

将本次循环当前位置的数随机位置的数进行交换。

let arr = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16];
for(let i = 0,len = arr.length; i < len; i++){
  let currentRandom = parseInt(Math.random() * (len - 1));
  let current = arr[i];
  arr[i] = arr[currentRandom];
  arr[currentRandom] = current;
}
//[15, 3, 1, 9, 13, 8, 10, 5, 7, 11, 12, 0, 16, 4, 6, 2, 14]
//[15, 6, 3, 7, 8, 5, 9, 0, 13, 4, 12, 1, 11, 16, 14, 10, 2]
//[1, 16, 10, 14, 13, 4, 6, 12, 5, 2, 9, 3, 8, 11, 15, 0, 7]
//[2, 9, 10, 13, 12, 15, 16, 8, 1, 11, 14, 0, 3, 5, 4, 7, 6]

 

相关文章
|
JavaScript API
Vue开发股票展示页面
Vue开发股票展示页面
494 0
|
开发者 容器
ArkUI框架,Flex布局,基础组件及封装,父子组件的双向绑定
Flex组件用于创建弹性布局,开发者可以通过Flex的接口创建容器组件,进而对容器内的其他元素进行弹性布局,例如:使三个元素在容器内水平居中,垂直等间隔分散。 例如:如下的布局代码分别表示:(垂直排列,水平居中,垂直居中)
633 0
ArkUI框架,Flex布局,基础组件及封装,父子组件的双向绑定
|
Web App开发 编解码 JavaScript
VUE播放RTSP方案,支持H.265!
VUE播放RTSP方案,支持H.265!如果你问一个前端技术人员,近几年最火的前端框架技术是什么,肯定会有人说VUE,确实VUE凭借其简单特性赢得了大家的喜爱,而近期公司有个项目,需要在VUE框架网页上播放RTSP实时视频。
1954 0
|
XML JavaScript Java
【JAVA XML 探秘】DOM、SAX、StAX:揭秘 Java 中 XML 解析技术的终极指南!
【8月更文挑战第25天】本文详细探讨了Java中三种主流的XML解析技术:DOM、SAX与StAX。DOM将XML文档转换为树状结构,便于全方位访问和修改;SAX采取事件驱动模式,适用于大型文件的顺序处理;StAX则兼具DOM和SAX的优点,支持流式处理和随机访问。文中提供了每种技术的示例代码,帮助读者理解如何在实际项目中应用这些解析方法。
581 1
|
11月前
|
监控 安全 网络安全
外贸企业网站制作:使用WordPress搭建一个展示型的外贸企业网站
本篇主要介绍使用WordPress的CMS管理系统搭建企业外贸网站,也可以称为B2B外贸网站。外贸网站制作需要准备的资料和建站流程:域名申请注册、服务器性能选配、服务器管理工具、WordPress的安装、企业展示型主题的选择和安装、使用WordPress插件的完成网站所需的功能、监控服务器运行状态保证网站正常运行、利用白帽技术提升SEO排名、使用SEO工具对站内内容文章的持续更新优化,吸引更多的自然流量提高转化率和成单率。
外贸企业网站制作:使用WordPress搭建一个展示型的外贸企业网站
|
安全 API 开发工具
Android平台RTMP推送|轻量级RTSP服务如何实现麦克风|扬声器声音采集切换
Android平台扬声器播放声音的采集,在无纸化同屏等场景下,意义很大,早期低版本的Android设备,是没法直接采集扬声器audio的(从Android 10开始支持),所以,如果需要采集扬声器audio,需要先做系统版本判断,添加相应的权限。
293 0
ly~
|
12月前
|
存储 安全 前端开发
php文件管理系统
PHP 文件管理系统是基于 PHP 开发的,用于管理文件和文件夹的应用。它支持文件上传、下载、浏览、搜索、编辑和删除,并提供权限管理和安全防护功能。适用于企业内部、网站和个人文件管理,确保文件的安全性、保密性和高效共享。
ly~
340 9
|
文字识别
入职必会-开发环境搭建09-屏幕截图软件-PixPin下载和安装
PixPin是一款功能强大使用简单的截图/贴图工具,帮助你提高效率,包含截图、贴图、长截图、文字识别、标注、GIF动图等功能。
448 1
|
存储 项目管理 文件存储
利用LabVIEW项目管理和组织LabVIEW应用程序
利用LabVIEW项目管理和组织LabVIEW应用程序
181 4
|
前端开发 JavaScript