打乱数组顺序的三种方法

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

可以用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]

 

相关文章
|
安全 C语言
C语言循环的使用注意点
在C语言中,合理使用循环对于编写高效、安全的代码至关重要。以下是几点建议:确保循环条件正确以避免无限循环;每次迭代时正确更新循环变量;恰当使用`break`和`continue`控制执行流程;注意嵌套循环中的变量作用域;简化循环体内逻辑;根据需求选择合适的循环类型;注意数据类型以避免溢出;保持良好的缩进和注释习惯;减少重复计算以提升性能;确保循环终止条件明确。遵循这些建议,可以提高代码质量和可维护性。
505 88
CORS 报错的常见原因
【10月更文挑战第6天】
|
12月前
|
监控 安全 网络安全
外贸企业网站制作:使用WordPress搭建一个展示型的外贸企业网站
本篇主要介绍使用WordPress的CMS管理系统搭建企业外贸网站,也可以称为B2B外贸网站。外贸网站制作需要准备的资料和建站流程:域名申请注册、服务器性能选配、服务器管理工具、WordPress的安装、企业展示型主题的选择和安装、使用WordPress插件的完成网站所需的功能、监控服务器运行状态保证网站正常运行、利用白帽技术提升SEO排名、使用SEO工具对站内内容文章的持续更新优化,吸引更多的自然流量提高转化率和成单率。
外贸企业网站制作:使用WordPress搭建一个展示型的外贸企业网站
ly~
|
存储 安全 前端开发
php文件管理系统
PHP 文件管理系统是基于 PHP 开发的,用于管理文件和文件夹的应用。它支持文件上传、下载、浏览、搜索、编辑和删除,并提供权限管理和安全防护功能。适用于企业内部、网站和个人文件管理,确保文件的安全性、保密性和高效共享。
ly~
377 9
|
安全 API 开发工具
Android平台RTMP推送|轻量级RTSP服务如何实现麦克风|扬声器声音采集切换
Android平台扬声器播放声音的采集,在无纸化同屏等场景下,意义很大,早期低版本的Android设备,是没法直接采集扬声器audio的(从Android 10开始支持),所以,如果需要采集扬声器audio,需要先做系统版本判断,添加相应的权限。
330 0
|
文字识别
入职必会-开发环境搭建09-屏幕截图软件-PixPin下载和安装
PixPin是一款功能强大使用简单的截图/贴图工具,帮助你提高效率,包含截图、贴图、长截图、文字识别、标注、GIF动图等功能。
560 1
|
存储 项目管理 文件存储
利用LabVIEW项目管理和组织LabVIEW应用程序
利用LabVIEW项目管理和组织LabVIEW应用程序
198 4
|
前端开发 JavaScript
|
Java Maven 微服务
【Java用法】微服务之间的相互调用方式之一,通过FeignClient客户端调用其他微服务的方法
【Java用法】微服务之间的相互调用方式之一,通过FeignClient客户端调用其他微服务的方法
537 0
|
前端开发 Java API
Android端通过HttpURLConnection上传文件到服务器
Android端通过HttpURLConnection上传文件到服务器
252 0