在给定条件下生成特定范围内的随机数 javascript - 次 table

Generate random numbers within specific range and with given conditions in javascript - times table

我已经为每个单独的乘数(从 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();