我正在尝试使用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}
我是一个初学者,因此感谢我的帮助,因为我无法找到任何有关此事的信息。预先感谢。
答案 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);
}
希望这会有所帮助。