当前位置:首页 > 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 方法实现乱序。

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

注意事项

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

js 实现数组乱序

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

相关文章

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 使用JavaScript实现拖拽功能需要监听鼠标事件,包括mousedown、mousemove和mouseup。以下是实现的基本逻辑: const draggableEleme…

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document…

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClip…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaS…

js实现报表

js实现报表

使用JavaScript实现报表 在JavaScript中实现报表功能可以通过多种方式完成,常见的方法包括使用原生JavaScript、第三方库(如Chart.js、D3.js)或结合后端数据渲染。以…