如何让一个随机数出现任意多次

How to make a random number appear as many times as I want

所以我想要一个来自下面代码的随机数(图片)出现我想要的时间。在这种情况下,我正在处理图片。假设我想制作一张名为 1.png 的图片,只是为了在屏幕上快速打印 4 次,然后让图片 5.png 和 6.png 一起返回 10 次(它可以是 3 倍 5.png、7 倍 6.png 和其他我们可以得到 10) 的方法等等。我完全不知道怎么办?

我希望我能以正确的方式解释我想要的,我希望任何人都能提供帮助,谢谢你的帮助。

function RandomImage() {
  return (Math.ceil(Math.random() * 10)).toString() + ".png";
}

如果你想复制一个字符串,你可以使用这样的函数

function repeat(item, number=1) {
  return Array.from({length: number}).fill(item)
}

你可以这样称呼它:

repeat(RandomImage(), 3) // -> ["1.jpeg", "1.jpeg", "1.jpeg"]

您可以通过设置一个数据结构来做到这一点,该数据结构跟踪特定数字已经被 return 编辑了多少次。 为此,我们可以利用 JavaScript 的 Map 对象。

所以基本思路是这样的:

  • 在随机数函数中我们生成一个随机数
  • 查看地图我们已经return编辑了多少次
  • 万一匹配,例如1==10 次我们回到步骤 1
  • 如果没有匹配项,则增加给定数字的映射条目,最终 return 数字

这是一个例子:

let randomNumbers = new Map();
let maxNumbers = 10;
for (let a = 0; a <= maxNumbers; a++) {
  randomNumbers.set(a, 0);
}

function RandomImage() {
  let failed = false;
  let random;
  do {
    failed = false;
    random = Math.ceil(Math.random() * maxNumbers);
    switch (random) {
      case 1:
        if (randomNumbers.get(1) == 4) {
          failed = true;
        }
        break;
      case 5:
        if (randomNumbers.get(5) + randomNumbers.get(6) == 10) {
          failed = true;
        }
        break;
      case 6:
        if (randomNumbers.get(5) + randomNumbers.get(6) == 10) {
          failed = true;
        }
        break;

    }
  }
  while (failed);
  randomNumbers.set(random, randomNumbers.get(random) + 1);
  return random.toString() + ".png";
}

for (let a = 0; a < 50; a++) {
  console.log(RandomImage());
}