根据百分比选择数组并对其进行洗牌
Picking array based off of percentage and shuffling it
我已经确定了我的百分比和数组。我知道我需要做到这一点,以便百分比决定选择哪个数组,然后我需要洗牌该数组以使其吐出三个“东西”之一。我知道有一种 easier/more 有效的方法可以做到这一点,而不会用一百万个洗牌函数来确定“Thing”变量来阻塞我的代码。
目前,它不工作(吐出“未定义”)但它让我挠头,因为我不确定问题是什么,以及想要简化它。
代码的全部要点是根据滚动百分比选择一个数组,随机化该数组,然后吐出它从洗牌中获得的值。
我正在使用的当前绝对垃圾箱火:
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;
}```
您的随机播放例程可能 return 一个包含结果的新数组。
您需要声明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];
}
首先,我认为没有必要设置不同的数组,然后使用 if-then-else 逻辑将百分比与一系列值进行比较。只需制作一个数组数组,然后使用 return 的索引来洗牌。这也意味着除非你真的需要 1-100 的数字来做其他事情,否则你应该只生成一个 0 到 4 之间的随机数。假设你需要我留下的百分比并将其缩放到 0 到 4 之间.
我可能也不会将 shuffle 逻辑与生成函数分开,但我将其分开,以便您可以更轻松地实现所需的 shuffle 逻辑。我不相信 js 中有内置的 shuffle 函数,就像其他一些语言一样,所以你将不得不有一个 shuffle 函数。这是一个关于洗牌的线程,我无耻地窃取了我从中包含的洗牌功能。不是说这是最好的,只是看起来很漂亮。 post 中有很多关于不同改组算法的不同含义的讨论。
How to randomize (shuffle) a JavaScript array?
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)
;
}
我已经确定了我的百分比和数组。我知道我需要做到这一点,以便百分比决定选择哪个数组,然后我需要洗牌该数组以使其吐出三个“东西”之一。我知道有一种 easier/more 有效的方法可以做到这一点,而不会用一百万个洗牌函数来确定“Thing”变量来阻塞我的代码。
目前,它不工作(吐出“未定义”)但它让我挠头,因为我不确定问题是什么,以及想要简化它。
代码的全部要点是根据滚动百分比选择一个数组,随机化该数组,然后吐出它从洗牌中获得的值。
我正在使用的当前绝对垃圾箱火:
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;
}```
您的随机播放例程可能 return 一个包含结果的新数组。
您需要声明
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];
}
首先,我认为没有必要设置不同的数组,然后使用 if-then-else 逻辑将百分比与一系列值进行比较。只需制作一个数组数组,然后使用 return 的索引来洗牌。这也意味着除非你真的需要 1-100 的数字来做其他事情,否则你应该只生成一个 0 到 4 之间的随机数。假设你需要我留下的百分比并将其缩放到 0 到 4 之间.
我可能也不会将 shuffle 逻辑与生成函数分开,但我将其分开,以便您可以更轻松地实现所需的 shuffle 逻辑。我不相信 js 中有内置的 shuffle 函数,就像其他一些语言一样,所以你将不得不有一个 shuffle 函数。这是一个关于洗牌的线程,我无耻地窃取了我从中包含的洗牌功能。不是说这是最好的,只是看起来很漂亮。 post 中有很多关于不同改组算法的不同含义的讨论。
How to randomize (shuffle) a JavaScript array?
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)
;
}