在For循环中迭代随机数

时间:2020-04-22 04:09:00

标签: javascript for-loop random callback

我正在尝试使用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}

我是一个初学者,因此感谢我的帮助,因为我无法找到任何有关此事的信息。预先感谢。

3 个答案:

答案 0 :(得分: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次。

答案 1 :(得分:0)

所以您要做的是:将 结果 randomNumber()传递给了objMaker函数的第一个参数。在这里,我强调“结果”,因为这意味着cb函数内的randomNumber参数是一个数字,这意味着它在函数内不会改变。

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

function objMaker(cb, num){
  console.log(cb); // notice that this is a number
  let obj = {
    a: 0,
    b: 0
  }
  for (var i = 0; i < num; i++) {

    // cb is both same since a number was passed (not a function)
    obj.a += cb; 
    obj.b += cb; // both cb here are identical, so a and b is the same at the end
  }
  return obj;
}

console.log(objMaker(randomNumber(), 9)) // randomNumber() here returns a random value

说实话,我个人不理解为什么必须将randomNumber函数传递给objMaker,但是假设您需要,我认为最好的方法是传递randomNumber 功能 ,而不是randomNumber()的结果。

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

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;
}

console.log(objMaker(randomNumber, 9))

或者根据您的使用情况,您可以为a和b设置不同但恒定的cb项。

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

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

console.log(objMaker(randomNumber(), randomNumber(), 9))

答案 2 :(得分:-1)

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

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

希望这会有所帮助。

相关问题