我似乎无法理解这个循环。
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
关键字的情况下甚至没有初始化。
有人可以解释这个循环是如何工作的吗?
答案 0 :(得分:1)
代码尝试做的是对数组进行洗牌。
它通过遍历数组来工作,对于每个位置,将值存储在临时变量中,在数组中选择另一个位置并将值与另一个位置交换。
临时变量是必需的,因为这是交换变量值的最简单方法。
答案 1 :(得分:1)
它只是在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作为循环的上限。