控制台log输出为何频频失踪?
wxss代码为何频频失效?
wxml布局为何乱作一团?
究竟是道德的沦丧?还是人性的缺失?
让我们一起来走跑进科学
前言
JavaScript 中可以通过多种方式将一个数组打乱顺序,下面介绍两种常见的方法。
正文
- 使用 sort() 方法和 Math.random() 函数
可以通过将数组的元素随机排序来打乱数组的顺序。具体做法是,使用数组的
sort()
方法和Math.random()
函数。在sort()
方法中传入一个比较函数,该函数返回一个随机数,表示每个元素应该放在哪个位置。
function shuffle(array) {
array.sort(() => Math.random() - 0.5);
}
const myArray = [1, 2, 3, 4, 5];
shuffle(myArray);
console.log(myArray); // 可能输出 [2, 5, 1, 4, 3]、[4, 2, 1, 5, 3] 等
在上面的代码中,我们定义了一个名为
shuffle()
的函数,该函数接受一个数组作为参数,然后使用sort()
方法和Math.random()
函数来打乱数组的顺序。然后我们调用该函数,并输出打乱后的数组。
- 使用 Fisher–Yates 算法
Fisher–Yates 算法(也称为 Knuth shuffle)是一种用于打乱数组顺序的常见算法。该算法的基本思想是从数组的末尾开始,随机选取一个元素并交换位置,然后再从数组的前面选取一个元素并交换位置,以此类推。
以下是使用 Fisher–Yates 算法打乱数组顺序的代码示例:
function shuffle(array) {
let currentIndex = array.length;
let randomIndex;
// 从数组末尾开始,逐个交换元素位置
while (currentIndex !== 0) {
// 随机选取一个元素
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex--;
// 交换元素位置
[array[currentIndex], array[randomIndex]] = [array[randomIndex], array[currentIndex]];
}
return array;
}
const myArray = [1, 2, 3, 4, 5];
shuffle(myArray);
console.log(myArray); // 可能输出 [3, 5, 2, 1, 4]、[2, 5, 3, 1, 4] 等
在上面的代码中,我们定义了一个名为
shuffle()
的函数,该函数接受一个数组作为参数,并使用 Fisher–Yates 算法来打乱数组的顺序。然后我们调用该函数,并输出打乱后的数组。
总结
需要注意的是,以上两种方法都是随机打乱数组的顺序,并不能保证每次的结果都是不同的。同时在使用 Fisher–Yates 算法时,也需要注意数组的长度,以防止超出数组索引的范围。