这个JavaScript随机数生成器是如何工作的
How does this JavaScript random number generator work?
我似乎无法理解这个循环。
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。
相关文章:
- Javascript:selenium Web驱动程序isDisplayed()不工作
- jQuery UI自动完成突然停止工作
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- JavaScript打印功能使日历停止工作
- Javascript.getHours()工作不正常
- 为什么这在IE中的工作方式与在Firefox中不同
- 视频HTML没有'无法在Internet Explorer 11上工作
- 扩展移相器按钮类不工作
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- 谷歌地图不是以HTML显示,而是在JS Fiddle上工作
- 正在尝试使用if和else添加类,但无法正常工作
- Jquery FadeIn FadeOut 只工作一次
- Foreach无法在Typescript中工作
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- 最大高度转换不;不工作,工作缓慢
- Gulp-rev:不是第一次工作,而是在第一次工作之后工作
- 在JavaScript中的类中,push和concat的工作方式有何不同
- JQuery - Ajax: encodeUriComponent不工作(EncodeUri工作)