【发布时间】:2018-11-06 03:15:46
【问题描述】:
我正在尝试编写一个应用程序,该应用程序将提供来自多个随机选择的组合结果。我正在使用二维数组。每个辅助数组的第一个元素是要“滚动”小于的数字,以返回辅助数组,其中包含一个字符串作为其第二个元素。
此外,字符串内部通常是另一个调用另一个数组的函数。
所有返回的字符串都连接成一个随机短语。
我的期望是每次调用每个函数都会给出一个新的随机结果。但是似乎正在发生的是,一旦第一个函数调用返回结果,所有嵌套函数调用每次都返回相同的结果。我希望每个嵌套函数调用每次都返回一个新的随机结果。
我希望我解释得足够好。这是我使用一些“示例”数组的一些代码,以试图弄清楚我在做什么。
// ROLL()
// times = NUMBER OF TIMES TO ROLL
// high = SIZE OF THE DIE / HIGHEST VALUE TO ROLL
// low = LOWEST VALUE (OPTIONAL)
// modifier = MODIFIER TO ROLL (OPTIONAL)
function roll(times, high, low, modifier) {
low = low || 1;
modifier = modifier || 0;
var result = 0;
for (var i = 0; i < times; i++) {
result += (Math.floor(Math.random() * ((high - low) + 1) + low));
}
result += modifier;
return result;
}
// RANDOMRESULT()
// array = A 2 DIM ARRAY
// modifier = MODIFIER TO ROLL (FOR THE ROLL() FUNCTION)
// dieSize = SIZE OF THE DIE (FOR THE ROLL() FUNCTION)
function randomResult(array, modifier, dieSize) {
var die = dieSize || array[array.length - 1][0];
var finalRoll = roll(1, die, 1, modifier);
for (i = 0; i <= array.length - 1; i++) {
if (finalRoll <= array[i][0]) {
return array[i];
}
}
}
//ASSUME MULTIPLE ARRAYS SET UP SIMILARLY
var array1 = [
[3, "You find " + roll(1, 10) + " dollars."],
[5, "You find " + roll(1, 20) + " dollars."],
[9, "You find " + roll(1, 30) + " dollars."]
];
var array2 = [...]
var someArray = [
[2, "Random result from array1. " + randomResult(array1)],
[4, "Random result from array2. " + randomResult(array2)],
[10, "Random result from array3. " + randomResult(array3)]
];
console.log(randomResult(someArray));
console.log(randomResult(someArray));
编辑:每次页面刷新的结果总是随机的,但是当 randomResult() 被多次调用时,嵌套数组函数会出现相同的结果。 多个 console.log 返回的示例...
(2) [2, "Random result from array1. 9,You find 1 dollars."]
(2) [10, "Random result from array3. 9,You find 2 dollars."]
(2) [10, "Random result from array3. 9,You find 2 dollars."]
(2) [2, "Random result from array1. 9,You find 1 dollars."]
(2) [10, "Random result from array3. 9,You find 2 dollars."]
(2) [4, "Random result from array2. 9,You find 2 dollars."]
因此,每次滚动 '2' 或更少时,array1 中的 roll() 函数总是返回相同的值。与其他结果和其他数组相同。
所以我的问题是首先,为什么会发生这种情况?可能是因为第二个函数调用时第一个函数调用还没有完成?
其次,有什么建议可以解决这个问题。也许使用对象方法而不是 2 个暗淡数组?
感谢任何评论或帮助。谢谢。
【问题讨论】:
-
我检查了你的array1,它确实有随机滚动结果。所以我不确定你的问题是什么。 :|
标签: javascript arrays