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 |
⚠️ 仅简单用途 | 简单但不均匀 |
| 返回新数组版本 | ✅ 推荐 | 保持原数组不变,更安全 |

浙公网安备 33010602011771号