你瞅啥呢

2025-09-21 js数组洗牌(ai)

使用 JavaScript 将数组 [1,2,3,4,5,6,7,8,9] 随机打乱(洗牌)。以下是几种常用方法,推荐使用 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;
}

// 使用示例
let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let shuffled = shuffleArray(arr);
console.log(shuffled); // 输出打乱后的数组,例如:[4, 9, 2, 7, 1, 5, 8, 3, 6]

✅ 特点:原地修改、高效、均匀随机


✅ 方法二:使用 sort() + Math.random()(简单但不推荐用于生产)

let arr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let shuffled = arr.sort(() => Math.random() - 0.5);

console.log(shuffled); // 例如:[3, 7, 1, 9, 4, 2, 8, 5, 6]

⚠️ 缺点:不够随机,分布不均,仅适合简单场景


✅ 方法三:函数式风格(不修改原数组)

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

// 使用
const original = [1, 2, 3, 4, 5, 6, 7, 8, 9];
const shuffled = shuffle(original);

console.log('原数组:', original);     // [1,2,3,4,5,6,7,8,9](未改变)
console.log('打乱后:', shuffled);     // 例如:[6, 1, 9, 3, 7, 2, 8, 4, 5]

🧪 示例输出(每次运行都不同)

[8, 1, 5, 9, 3, 2, 7, 4, 6]
[3, 6, 1, 8, 4, 9, 2, 7, 5]
[9, 4, 2, 7, 1, 6, 3, 8, 5]

✅ 总结

方法 是否推荐 说明
Fisher-Yates ✅ 强烈推荐 公平、高效、标准做法
sort() + random ⚠️ 仅简单用途 简单但不均匀
返回新数组版本 ✅ 推荐 保持原数组不变,更安全

posted @ 2025-09-21 14:49  叶乘风  阅读(15)  评论(0)    收藏  举报