当前位置:首页 > JavaScript

js实现重排

2026-02-02 09:28:28JavaScript

实现数组重排

使用Array.prototype.sort()方法结合随机数生成器实现数组元素的随机重排。这种方法通过比较函数返回随机正负值打乱原有顺序。

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

Fisher-Yates洗牌算法

经典的Fisher-Yates算法通过逆向遍历数组并随机交换元素实现高效重排,时间复杂度为O(n)。这是目前最推荐的标准实现方式。

function fisherYatesShuffle(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;
}

使用ES6特性简化

利用扩展运算符和箭头函数可以写出更简洁的现代JavaScript实现:

const modernShuffle = arr => 
  [...arr].reduceRight((res, _, i, a) => 
    (res.push(a.splice(Math.floor(Math.random() * (i + 1)), 1)[0]), res), []);

性能优化版本

对于大型数组,使用位运算和类型化数组可以提升性能:

function optimizedShuffle(array) {
  const typedArray = new Uint32Array(array.length);
  crypto.getRandomValues(typedArray);

  return array.reduce((shuffled, _, i) => {
    const j = typedArray[i] % (i + 1);
    if (j !== i) [shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]];
    return shuffled;
  }, [...array]);
}

不可变重排实现

保持原数组不变的情况下返回新数组:

js实现重排

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

标签: js
分享给朋友:

相关文章

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let co…

js实现图片预览

js实现图片预览

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

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Jav…

js实现报表

js实现报表

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

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 // 获取所有…

js实现投球

js实现投球

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