For循环内的迭代随机数

问题描述 投票:0回答:2

我正在尝试使用For循环将随机整数(从0-2)添加到变量指定的次数。我遇到的问题是,循环在每次循环时都没有使用新的随机数,因此,例如,如果我传入9,我只会得到0、9或18。

我希望对象返回带有不同数字值的键“ a”和“ b”。

这是我的随机数获取器:

function randomNumber(min, max){
   min = Math.ceil(0);
   max = Math.floor(3);
   return Math.floor(Math.random() * (max - min)) + min;
}

这是我调用randomNumber()的函数:

function objMaker(cb, num){
  let obj = {
    a: 0,
    b: 0
  }
  for (var i = 0; i < num; i++) {
    obj.a += cb;
    obj.b += cb;
  }
  return obj;
}

objMaker(randomNumber(), 9)
// returns obj { a:0, b:0}
// or obj { a:9, b:9}
// or obj { a:18, b:18}

我是一个初学者,由于无法找到任何相关信息,因此感谢您的帮助。预先感谢。

javascript for-loop random callback
2个回答
0
投票

如果我理解正确,您想在for循环的每次迭代处生成一个新的随机数。如果是这种情况,那么您也需要在每次迭代时都调用您的randomNumber()

function randomNumber() {
   const min = Math.ceil(0);
   const max = Math.floor(3);
   return Math.floor(Math.random() * (max - min)) + min;
}

function objMaker(num){
  let obj = {
    a: 0,
    b: 0
  }
  for (var i = 0; i < num; i++) {
    obj.a += randomNumber();
    obj.b += randomNumber();
  }
  return obj;
}

function test() {
  console.log(objMaker(9));
}
<button id=generate onclick='test()'>generate</button>

如果写入objMaker(randomNumber(), 9),它将生成一次0、1或2,然后将其作为cb传递给objMaker。因此,在for循环内,它总是将相同的数字相加9次。


0
投票

如果您使用0或1作为最小值,则无需指定(仅指定max就足够了)。假设max为2],以下函数将起作用

function randomNumber(max){
   return Math.round(Math.random() * max);
}

希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.