当前位置:首页 > JavaScript

js实现乱序

2026-04-05 22:54:03JavaScript

使用 sortMath.random 实现乱序

通过 Array.prototype.sort 结合 Math.random 实现简单乱序。Math.random() 生成 0 到 1 的随机数,sort 方法根据返回值决定排序顺序。

const array = [1, 2, 3, 4, 5];
const shuffled = array.sort(() => Math.random() - 0.5);
console.log(shuffled); // 输出乱序后的数组

注意:此方法在部分情况下可能无法保证完全均匀的随机性,适用于简单场景。

js实现乱序

Fisher-Yates 洗牌算法

Fisher-Yates 算法是一种高效且均匀的乱序方法,通过遍历数组并随机交换元素实现。

function shuffle(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 array = [1, 2, 3, 4, 5];
console.log(shuffle(array)); // 输出乱序后的数组

该方法的时间复杂度为 O(n),且能保证每个元素出现在每个位置的概率均等。

js实现乱序

使用 lodash 库的 _.shuffle

如果需要快速实现且不关注底层细节,可以使用 lodash 提供的 _.shuffle 方法。

const _ = require('lodash');
const array = [1, 2, 3, 4, 5];
console.log(_.shuffle(array)); // 输出乱序后的数组

lodash 的实现基于 Fisher-Yates 算法,适合在项目中直接调用。

注意事项

  • 均匀随机性sort 结合 Math.random 的方式可能在某些 JavaScript 引擎中分布不均匀,Fisher-Yates 是更可靠的选择。
  • 性能:对于大型数组,Fisher-Yates 算法性能优于 sort
  • 不可变操作:上述方法会修改原数组,如需保留原数组,可先创建副本:
    const shuffled = [...array].sort(() => Math.random() - 0.5);

标签: js
分享给朋友:

相关文章

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js实现视口

js实现视口

js实现视口检测的方法 使用JavaScript检测元素是否进入视口(viewport)可以通过Intersection Observer API或手动计算元素位置实现。以下是两种常见方法: Int…

js实现滚动

js实现滚动

实现滚动效果的方法 在JavaScript中实现滚动效果可以通过多种方式完成,以下是一些常见的方法: 使用window.scrollTo() window.scrollTo()方法可以将页面滚动到指…

js图片轮播的实现

js图片轮播的实现

基础图片轮播实现 使用HTML、CSS和JavaScript实现一个简单的图片轮播效果。HTML部分定义轮播容器和图片,CSS负责样式和过渡效果,JavaScript处理逻辑。 <div cl…