javascript - 如何在不包含集合数的情况下生成随机数?

标签 javascript

<分区>

我只是想生成从 1 到 25 的 8 个随机数。我的问题是我已经有了一个变量,它的值为 14,话虽如此,我的问题是如何生成从 1 到 25 的随机数,并且如果其中一个等于 14,则将其替换为另一个随机数?最后,我想在我的数组中有 8 个随机数,我不想在其中包含 14 个。谁能告诉我我遗漏了什么或如何使它更准确?有时我的数组中只有 7 个元素,有人知道为什么吗?

这是我的代码:

var arr = [];
var currentvar = 14;
	for(var i = 0 ; i < 9; i++){
		var num = Math.floor(Math.random()*25) + 1;
		if(num === currentvar){
		   num = Math.floor(Math.random()*25) + 1;
		}else{
		  arr.push(num);
		}
	}

	console.log(arr);

最佳答案

更仔细地研究您实现的逻辑。您正好经历了 9 次循环(而不是 8 次),并且由于 if...else 控制流,每次迭代的结果都是互斥的。

或者 如果 num 等于 currentvar,您可以重新分配它(您应该通过从中删除 var 来正确执行此操作)第二个赋值),将它添加到数组中,永远不要在一次迭代中同时进行。这就是 else 的意思,您可能需要一个 do...while 循环来分配 num until 它是不等于 currentvar

var arr = [];
var currentvar = 14;
var num;

for (var i = 0; i < 8; i++) {
  do {
    num = Math.floor(Math.random() * 25) + 1;
  } while (num === currentvar);

  arr.push(num);
}

console.log(arr);

或者,如果你想保留你的 if...else 语句,你可以减少循环计数器 i 而不是在 时重复循环一次>num === 当前变量:

var arr = [];
var currentvar = 14;

for (var i = 0; i < 8; i++) {
  var num = Math.floor(Math.random() * 25) + 1;

  if (num === currentvar) {
    i--;
  } else {
    arr.push(num);
  }
}

console.log(arr);

关于javascript - 如何在不包含集合数的情况下生成随机数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51805166/

相关文章:

javascript - AngularJS - 用数组填充下拉列表

javascript - Angular Jasmine UI 路由器将解析值注入(inject)测试

javascript - 带有 IE 11 的 jQuery UI 自动完成 - 有线行为

javascript - 将参数作为数组传递

javascript - click() 触发多次

javascript - 如何在 QUnit 中测试自定义断言

javascript - 如何使用 ews-javascript-api 删除个人地址簿联系人

javascript - 如何使用正则表达式提取正文内容

Javascript 由于测试中出现双引号而失败

javascript - 如何排除 Jasmine 中的一些规范文件?