我已经把百分比和数组一起敲定了。我知道我需要制作它,使百分比决定哪个数组被选中,然后我需要打乱该数组,使其吐出三个"数组"中的一个;事物";。我知道有一种更简单/更有效的方法可以做到这一点,而不会用一百万个shuffle函数来阻塞我的代码;事情"变量
目前,它不起作用(吐出"未定义"(,但它让我挠头,因为我不确定问题是什么,同时也想简化它
代码的全部目的是根据滚动的百分比选择一个数组,对该数组进行随机化,并将其从混洗中得到的值吐出来。
我正在处理的当前垃圾箱绝对火灾:
function generate(){
var tierOne = ["thing one", "thing two", "thing three"]
var tierTwo = ["thing four", "thing five", "thing six"]
var tierThree = ["thing seven", "thing eight", "thing nine"]
var tierFour = ["thing ten", "thing eleven", "thing twelve"]
var tierFive = ["thing thirteen", "thing fourteen", "thing fifteen"]
var percent = r();
if (percent >= 0 && percent < 25) {
shuffle(tierOne)
thing = tierOne;
return thing[0];
} else if (percent >= 25 && percent < 36) {
shuffle(tierTwo)
thing = tierTwo;
return thing[0];
} else if (percent >= 36 && percent < 60) {
shuffle(tierThree)
thing = tierThree;
return thing[0];
} else if (percent >= 60 && percent < 76) {
shuffle(tierFour)
thing = tierFour;
return thing[0];
} else {
shuffle(tierFive)
thing = tierFive;
return thing[0];
}
}
function r() {
Math.floor(Math.random() * 100) + 1;
return Math.floor(Math.random() * 100) + 1;
}```
首先,我认为没有必要设置不同的数组,然后使用if-then-else逻辑,将百分比与一系列值进行比较。只需制作一个数组数组,然后使用索引返回要混洗的数组。这也意味着,除非你真的需要1-100的数字来做其他事情,否则你可能只需要生成一个0到4之间的随机数。假设你需要我留下的百分比,然后将其缩放到0到4之间。
我可能也不会把shuffle逻辑和generate函数分开,但我把它分开了,这样你就可以更容易地实现你想要的shuffle。我不相信js中有像其他语言中那样的内置shuffle函数,所以你必须有一个shuffle功能。这是一个关于洗牌的帖子,我无耻地从中窃取了我包含的洗牌功能。并不是说这是最好的,只是看起来很漂亮。这篇文章中有很多关于不同洗牌算法的不同含义的讨论。
如何随机化(搅乱(JavaScript数组?
console.log(generate());
function generate(){
const raw = [
["thing one", "thing two", "thing three"],
["thing four", "thing five", "thing six"],
["thing seven", "thing eight", "thing nine"],
["thing ten", "thing eleven", "thing twelve"],
["thing thirteen", "thing fourteen", "thing fifteen"]
];
var percent = Math.floor(Math.random() * 100) + 1;
var i = Math.ceil(percent/20)-1;
return shuffle(raw[i])[0];
}
function shuffle(unshuffled){
return unshuffled
.map((value) => ({ value, sort: Math.random() }))
.sort((a, b) => a.sort - b.sort)
.map(({ value }) => value)
;
}
-
您的shuffle例程可能会返回一个带有结果的新数组。
-
您需要声明
thing
,并且不使用全局变量。
if (percent >= 0 && percent < 20) {
const thing = shuffle(tierOne)
return thing[0];
}
或
let thing
if (percent >= 0 && percent < 20) {
thing = shuffle(tierOne)
return thing[0];
}