当前位置:首页 > JavaScript

js 实现数组乱序

2026-02-03 06:27:53JavaScript

方法一:使用 sort 结合随机数

通过 Math.random() 生成随机数,利用 sort 方法随机排序数组元素。这种方式简单但存在一定的偏差,因为 sort 的排序算法可能不完全随机。

const shuffleArray = (arr) => {
  return arr.sort(() => Math.random() - 0.5);
};

const array = [1, 2, 3, 4, 5];
console.log(shuffleArray(array));

方法二:Fisher-Yates 洗牌算法

Fisher-Yates 算法是一种高效且完全随机的乱序方法。从数组末尾开始,依次与随机位置的元素交换。

const shuffleArray = (arr) => {
  for (let i = arr.length - 1; i > 0; i--) {
    const j = Math.floor(Math.random() * (i + 1));
    [arr[i], arr[j]] = [arr[j], arr[i]];
  }
  return arr;
};

const array = [1, 2, 3, 4, 5];
console.log(shuffleArray(array));

方法三:使用 Array.map 结合随机值

通过为每个元素分配随机值,然后根据随机值排序。这种方式类似于方法一,但更直观。

const shuffleArray = (arr) => {
  return arr
    .map((value) => ({ value, sort: Math.random() }))
    .sort((a, b) => a.sort - b.sort)
    .map(({ value }) => value);
};

const array = [1, 2, 3, 4, 5];
console.log(shuffleArray(array));

方法四:使用 Lodash 库的 _.shuffle

如果项目中已引入 Lodash,可以直接使用其 _.shuffle 方法实现乱序。

js 实现数组乱序

const _ = require('lodash');
const array = [1, 2, 3, 4, 5];
console.log(_.shuffle(array));

注意事项

  • Fisher-Yates 算法是推荐的标准实现,因为它的随机性更均匀。
  • 方法一和方法三的随机性可能不够完美,适合对随机性要求不高的场景。
  • Lodash 的 _.shuffle 内部也采用 Fisher-Yates 算法,适合直接调用。

标签: 数组js
分享给朋友:

相关文章

js 实现链表

js 实现链表

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

使用js实现

使用js实现

使用JavaScript实现 JavaScript可以通过Math.random()函数生成随机数,结合其他方法可以实现多种随机数生成需求。 // 生成0到1之间的随机小数 const random…

js 实现拖拽

js 实现拖拽

实现拖拽的基本步骤 在JavaScript中实现拖拽功能需要监听几个关键事件:mousedown、mousemove和mouseup。以下是实现的基本逻辑。 监听目标元素的mousedown事件,记…

java如何遍历数组

java如何遍历数组

遍历数组的方法 Java中遍历数组有多种方式,以下是常见的几种方法: 使用for循环 通过索引逐个访问数组元素: int[] array = {1, 2, 3, 4, 5}; for (int i…

js 实现全屏

js 实现全屏

使用 requestFullscreen 方法 通过调用元素的 requestFullscreen 方法可以实现全屏。该方法兼容现代浏览器,但不同浏览器可能需要前缀。 const element =…

js实现乘法

js实现乘法

实现乘法运算的方法 在JavaScript中实现乘法运算可以通过多种方式完成,以下列举几种常见方法: 基础运算符 直接使用乘法运算符*是最简单的方式: let result = 3 * 5; //…