我為每個單獨的乘數(2 - 10 的數字)生成了一組隨機數字(生成的數字)。
儘管不像預期的那樣,代碼本身確實會生成數字。
當前行為:
預期行為:
這是我到目前為止所得到的
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
數組代表您的“number2、number3”等。
循環開始於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();
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句