当前位置:首页 > JavaScript

js实现乱序

2026-03-14 04:50:34JavaScript

使用 Fisher-Yates 洗牌算法

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;
}

使用 sort() 结合随机数

这种方法利用比较函数的随机返回值实现乱序,但需要注意其随机性可能不够均匀。

js实现乱序

function randomSort(array) {
  return array.sort(() => Math.random() - 0.5);
}

使用 lodash 库的 shuffle 方法

如果项目中已使用 lodash 库,可以直接调用其 shuffle 方法。

js实现乱序

const _ = require('lodash');
const shuffled = _.shuffle([1, 2, 3, 4]);

创建新数组的乱序方法

该方法通过从原数组随机抽取元素构建新数组实现乱序。

function randomizeArray(array) {
  const newArray = [];
  while (array.length > 0) {
    const randomIndex = Math.floor(Math.random() * array.length);
    newArray.push(array.splice(randomIndex, 1)[0]);
  }
  return newArray;
}

性能考虑

对于大型数组,Fisher-Yates 算法是最优选择,时间复杂度为 O(n)。sort() 方法的时间复杂度为 O(n log n),而创建新数组的方法由于频繁使用 splice(),性能会受到影响。

注意事项

Math.random() 生成的伪随机数不适合加密场景。在需要加密级随机性的情况下,应使用 crypto.getRandomValues()。

标签: js
分享给朋友:

相关文章

js实现拖拽

js实现拖拽

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

js实现图片预览

js实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('image…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式系…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <…