在时间表中给定条件下,在特定范围内生成随机数



我为每个单独的乘法器(2-10之间的数字(生成了一组随机数字(生成的数字(。

代码本身确实生成了数字,尽管并不像预期的那样。

当前行为:

  • 它呈现数组中的数字(有时是重复的((例如2x4和2x4(
  • 它每次都渲染不同长度的数组
  • 呈现的数字乘积值是重复的(如果有一个4x7和7x4的对象,它应该用新值替换其中一个集(
  • 数字对象在给定条件下渲染(例如,数字9乘法器将至少渲染一次,但不超过3次(

预期行为:

  • 它为每个乘法器呈现一组唯一的数字
  • 始终渲染具有相同长度的数组(长度==18(
  • 检查乘法器和生成的数字的乘积是否与数组中的值匹配,如果匹配,则它在中呈现另一组数字(仍在条件内(

这就是我到目前为止得到的

const randomNumbersGenerator = () => {
function getRandomInt(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min) + min);
}
const number2 = getRandomInt(0, 2);
const number3 = getRandomInt(0, 3);
const number4 = getRandomInt(0, 3);
const number5 = getRandomInt(0, 3);
const number6 = getRandomInt(1, 4);
const number7 = getRandomInt(1, 4);
const number8 = getRandomInt(1, 4);
const number9 = getRandomInt(1, 4);
const number10 = getRandomInt(0, 2);
const number11 = getRandomInt(0, 3);
const randomNumber = () => getRandomInt(2, 12);
let current;
const numbersArray = [];
for (let i = 0; i < number2; i += 1) {
if (numbersArray.indexOf((current = randomNumber())) === -1) {
numbersArray.push({
multiplier: 2,
generated: current
});
}
}
for (let i = 0; i < number3; i += 1) {
if (numbersArray.indexOf((current = randomNumber())) === -1) {
numbersArray.push({
multiplier: 3,
generated: current
});
}
}
for (let i = 0; i < number4; i += 1) {
if (numbersArray.indexOf((current = randomNumber())) === -1) {
numbersArray.push({
multiplier: 4,
generated: current
});
}
}
for (let i = 0; i < number5; i += 1) {
if (numbersArray.indexOf((current = randomNumber())) === -1) {
numbersArray.push({
multiplier: 5,
generated: current
});
}
}
for (let i = 0; i < number6; i += 1) {
if (numbersArray.indexOf((current = randomNumber())) === -1) {
numbersArray.push({
multiplier: 6,
generated: current
});
}
}
for (let i = 0; i < number7; i += 1) {
if (numbersArray.indexOf((current = randomNumber())) === -1) {
numbersArray.push({
multiplier: 7,
generated: current
});
}
}
for (let i = 0; i < number8; i += 1) {
if (numbersArray.indexOf((current = randomNumber())) === -1) {
numbersArray.push({
multiplier: 8,
generated: current
});
}
}
for (let i = 0; i < number9; i += 1) {
if (numbersArray.indexOf((current = randomNumber())) === -1) {
numbersArray.push({
multiplier: 9,
generated: current
});
}
}
for (let i = 0; i < number10; i += 1) {
if (numbersArray.indexOf((current = randomNumber())) === -1) {
numbersArray.push({
multiplier: 10,
generated: current
});
}
}
for (let i = 0; i < number11; i += 1) {
if (numbersArray.indexOf((current = randomNumber())) === -1) {
numbersArray.push({
multiplier: 11,
generated: current
});
}
}
console.log(numbersArray);
return numbersArray;
};
randomNumbersGenerator();

您也可以通过codeSandbox查看:https://codesandbox.io/s/upbeat-jang-coqd5?file=/src/index.js:660-672

我想这就是您想要的。我采取了完全不同的方法。

首先,我使用Map是因为它很容易确保唯一性。(密钥必须是唯一的(

注意,我使用一个简单的字符串作为密钥,以确保它们是唯一的(使用对象会变得有点复杂(

ranges数组表示您的"数字2、数字3"等

循环从2开始,以满足您的乘数范围(2-11(。这需要一些技巧才能正确地获取索引圆锥体。

这会生成唯一的对(作为关键字(,映射的值就是生成的值和相乘后的乘积。

尺寸和地图打印在控制台中。

const randomNumbersGenerator = () => {
function getRandomInt(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min) + min);
}
const randomNumber = () => getRandomInt(2, 12);
const multiplierMap = new Map();
const ranges = [[0, 2], [0, 3], [0, 3], [0, 3], [0, 3], [1, 4], [1, 4], [1, 4], [1, 4], [0, 2], [0, 3]];
while(multiplierMap.size < 17) {
for (let i = 2; i < ranges.length+1; i++) {
const randomInt = randomNumber();
if(Array.from(multiplierMap.values).includes(randomInt * i)){
--i;
} else {
multiplierMap.set(randomInt + " " + i, randomInt * i);
}
if(multiplierMap.size === 18) break;
}
}
console.log('MultiplierMap size: ', multiplierMap.size);
for(let [pair, multiple] of multiplierMap){
console.log('Generated Multiplier: ' + pair, '||', 'Generated * Multiplier: ' + multiple);
}
return multiplierMap;
};
randomNumbersGenerator();

最新更新