这个JavaScript随机数生成器是如何工作的

How does this JavaScript random number generator work?

本文关键字:工作 何工作 JavaScript 随机数生成器 这个      更新时间:2023-09-26

我似乎无法理解这个循环。

for (i = 1; i < 50; i++) {
    rand = Math.ceil(Math.random() * 49);
    temp = nums[i];
    nums[i] = nums[rand];
    nums[rand] = temp;
}

它是更大代码的一部分。nums[i]是一个1-49的数组,用它们各自的索引号填充,然后它通过这个for循环并用随机数填充。

我不明白为什么要创建临时变量,nums[rand]=temp;代码行是如何工作的,它做了什么,为什么没有var关键字就没有初始化它。

有人能解释一下这个循环是如何工作的吗?

代码试图做的是打乱数组。它的工作原理是遍历数组,对于每个位置,将值存储在一个临时变量中,在数组中选择另一个位置,并将值与另一位置交换
temp变量是必需的,因为这是交换变量值的最简单方法。

它只是随机交换nums数组中的两个值。尽管忽略了第一个;javascript数组从0开始,但循环只从1开始,所以它只从第二个数组元素开始。

因此,遍历代码,每次循环时,它都会做这样的事情:

nums = [a, b, c];  // just mocking some data
rand = 0..2;  // lets say it = 2
temp = nums[1]; // = 'b', the 2nd array element
nums[1] = temp;  // so nums[1] goes from 'b' to 'c'
nums[temp] = temp; // and nums[2] goes from 'c' to 'b'

总的来说,这是相当糟糕的代码。如果它使用数组,则应该使用array.length,而不是对循环的上限进行硬编码50。