新闻中心
JS数组如何随机排序_J*aScript数组随机打乱顺序方法与洗牌算法教程
Fisher-Yates洗牌算法是J*aScript中实现数组随机排序的推荐方法,通过从数组末尾开始与随机位置交换元素,确保每个元素等概率出现在任意位置。该算法可原地修改数组或返回新数组,避免使用sort() + Math.random()这种不公正的方法,还可封装为数组原型方法以方便调用,核心在于正确生成范围为[0, i]的随机索引,保证打乱结果的公平性与高效性。

J*aScript中实现数组随机排序,也就是常说的“洗牌”,最常用的方法是使用Fisher-Yates 洗牌算法。这种方法高效、公平,能确保每个元素出现在任意位置的概率相等。下面介绍几种实用的实现方式。
1. Fisher-Yates 洗牌算法(推荐)
该算法从数组末尾开始,依次与前面的随机位置交换元素。每一步都减少待处理部分的长度,直到整个数组被打乱。
// 原地打乱数组(修改原数组)function shuffleArray(array) {
for (let i = array.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[array[i], array[j]] = [array[j], array[i]];
}
return array;
}
// 使用示例
const arr = [1, 2, 3, 4, 5];
shuffleArray(arr);
console.log(arr); // 输出类似 [3, 1, 5, 2, 4]
2. 返回新数组的洗牌方法
如果不想修改原数组,可以先复制一份再打乱。
function getShuffledArray(array) {
const newArr = [...array];
for (let i = newArr.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[newArr[i], newArr[j]] = [newArr[j], newArr[i]];
}
return newArr;
}
// 示例:不改变原数组
const original = [1, 2, 3,
4, 5];
const shuffled = getShuffledArray(original);
console.log(original); // [1, 2, 3, 4, 5]
console.log(shuffled); // 随机顺序
3. 不推荐:使用 sort() + Math.random()
有些人会用 sort() 配合 Math.random() 实现随机排序:
OneStory
OneStory 是一款创新的AI故事生成助手,用AI快速生成连续性、一致性的角色和故事。
319
查看详情
arr.sort(() => Math.random() - 0.5);
这种方法看似简单,但结果并不真正随机,不同浏览器的排序算法可能导致偏差,某些排列出现概率更高。因此不建议在需要公平打乱的场景使用。
4. 扩展:封装成数组原型方法(可选)
如果你经常需要打乱数组,可以扩展 Array.prototype:
Array.prototype.shuffle = function() {
for (let i = this.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[this[i], this[j]] = [this[j], this[i]];
}
return this;
};
// 使用
const list = [10, 20, 30, 40];
list.shuffle();
console.log(list); // 随机顺序
基本上就这些。Fisher-Yates 是最可靠的方式,理解原理后很容易写出稳定高效的随机排序代码。不复杂但容易忽略细节,比如随机索引范围必须包含当前项。掌握这个算法,数组打乱就没问题了。
以上就是JS数组如何随机排序_J*aScript数组随机打乱顺序方法与洗牌算法教程的详细内容,更多请关注其它相关文章!
# 拖拽
# 营销推广页面图片素材
# 深圳seo网站推广
# 淘宝网站优化策略有哪些
# seo计划执行
# 网站建设类直通车
# seo全部教程下载
# 永新网站关键词优化
# 物流网站建设网站
# 温州定制网站建设制作
# 陕西网站建设优化软件
# 有哪些
# 这种方法
# 如果你
# js如何使用教程
# 拖放
# 高阶
# 有什么区别
# 出现在
# 如何实现
# 如何使用
# 排列
# 排序算法
# 浏览器
# js
# java
# javascript
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
J*aScript Promise链中如何正确终止后续.then执行并处理错误
C++如何检测键盘输入_C++ _kbhit与_getch函数非阻塞输入
Golang如何使用bytes.Split分割字节切片_Golang bytes切片分割方法
J*aScript DOM操作:高效清空列表元素的策略与实践
Composer中的^和~符号代表什么_精通Composer版本号语义化约束
Excel函数批量查找替换超快方法_Excel用REPLACE和FIND函数秒级替换
PowerPoint如何制作滚动字幕结尾彩蛋_PowerPoint路径动画实现平滑滚动字幕效果
mcjs网页版流畅运行 mcjs低配电脑畅玩入口
Mac怎么查看崩溃日志_Mac控制台错误报告分析
汽水音乐车机版横屏版7.1 汽水音乐车机版横屏版下载入口
Safari怎么安装扩展程序 浏览器插件安装与管理方法【详解】
特斯拉自动驾驶房车计划曝光 原型车将于2027年亮相
Surface怎么安装系统 微软Surface Pro U盘重装win11教程
快手极速版在线观看 官方网页版登录地址
jQuery Mask 插件中实现电话号码固定前导零的教程
中兴Axon42Ultra怎样在文件App筛图_iPhone中兴Axon42Ultra文件App筛图【图片筛选】
J*aScript实现单选按钮与关联输入框的联动禁用教程
利用5118提升短视频内容效果_5118短视频关键词优化方法
快手官方唯一登录入口 谨防山寨钓鱼网站
Win10如何清理注册表垃圾 Win10手动清理无效注册表【技巧】
c++如何使用chrono库处理时间_c++标准库时间与日期操作
内存检查:在VS Code中调试C++时的内存视图
顺丰快件物流信息 官方网站查询入口
Bilibili动漫最新防封地址发布-Bilibili动漫2025年最稳正版入口推荐
邮政快递单号查询入口 邮政快递物流信息在线查询入口
抓大鹅解压小游戏 抓大鹅摸鱼解压入口
zookeeper 都有哪些功能?
Python类型检查:优化关联可选属性的Mypy推断策略
蛙漫官网漫画入口地址_蛙漫在线畅读无广告弹窗
晋江读书网页版在线登录 晋江读书电脑版官网
百度网盘网页版入口 百度网盘网页版官方登录网址
Typer应用中动态命令行参数的解析与处理
2026年发布! 美少女养成动作RPG《神剑少女战记》发布实机演示
AO3官方镜像站点汇总 AO3同人作品网页版直达链接
c++如何使用TBB库进行任务并行_c++ Intel线程构建模块
mysql通配符支持数字匹配吗_mysql通配符能否用于数字匹配的解析
2025-2030年全球乘用车销量预测:新能源成增长主力
Steam官网入口直达 Steam注册及登录步骤
百度浏览器字体显示异常偏小_百度浏览器字体渲染修复方案
邮政快递包裹最新位置 邮政快递实时追踪入口
Win11怎么修改默认浏览器_Windows 11设置Chrome为默认
冬*霸灯泡不亮怎么办_浴霸取暖灯一盏不亮的灯座清洁修复法
Yandex官方入口网址 Yandex俄罗斯搜索引擎最新在线地址
C++20的source_location是什么_C++在编译期获取源码位置信息用于日志和断言
c++如何实现一个简单的ECS框架_c++数据驱动设计与游戏开发
包子漫画官方网站在线链接-包子漫画在线阅读平台主页地址
126邮箱网页版官方入口 126邮箱账号在线登录平台
Python多版本共存与虚拟环境管理深度指南
C++的std::mdspan是什么_C++23中用于操作多维数组的非拥有视图
抖音网页版怎么|直播|_抖音网页版开播操作指南


2025-11-02
浏览次数:次
返回列表