JQuery - 将随机数添加到数组中,然后在打印数组之前检查是不是有重复

Posted

技术标签:

【中文标题】JQuery - 将随机数添加到数组中,然后在打印数组之前检查是不是有重复【英文标题】:JQuery - Adding random numbers to an array and then checking if there are repetitions before printing arrayJQuery - 将随机数添加到数组中,然后在打印数组之前检查是否有重复 【发布时间】:2021-04-25 05:54:43 【问题描述】:

我正在尝试编写一个“for”循环,它将遍历数组中 30 首歌曲的列表,然后打印该数组中 20 个随机项目的列表,不重复。


var items = [];
var songList = [];
var pastSongs = [];

for (i = 1; i <= 30; i++) 
  items.push("song" + i);



$(".btn").click(function getRandom() 

  for (g = 1; g <= 20; g++) 

    var randomItem = (items[Math.floor(Math.random() * items.length)]);

    $("h2").text(randomItem);

    songList.push(randomItem);


    if (pastSongs.includes(randomItem)) 
      $("p").text("repeat");
     else 
      $("p").text(songList);
      (pastSongs).push(randomItem);
    

  

);

【问题讨论】:

只需使用随机算法***.com/questions/2450954/… 这能回答你的问题吗? How to efficiently randomly select array item without repeats? 也是我的回答Here 可能有帮助 【参考方案1】:

如果我只关注问题标题。

将随机数添加到数组中,然后在打印数组之前检查是否有重复

除了“假定的”用例,建议的关于“洗牌现有数组”的副本会非常好。如果您想创建一个具有 amount 长度的值在 minmax 之间的唯一数字数组,方法如下:

function getArrayOfuniqueRandomNumbers(min, max, amount) 
  let result = [];

  if (amount !== undefined && amount < max - min) 
    while (result.length < amount) 
      let randomNumber = Math.floor(Math.random() * (max - min));
      if (result.indexOf(randomNumber) == -1) 
        result.push(randomNumber);
      
    
  

  return result;


// So here, you request an array of 20 numbers between 0 and 30
console.log(getArrayOfuniqueRandomNumbers(0,30,20))

如果给定minmax,请求的amount 是可能的,该函数将返回一个非空数组。

有一个条件可以避免while 的无限循环。因此,如果提供的参数不允许找到所需数量的唯一数字,它将返回一个空数组。

工作原理

while 没有达到amount,继续尝试添加一个新的随机数。

仅当由于.indexOf() 检查而不存在时,才会将数字添加到要返回的数组中。

对返回的数组做任何你想做的事情。

【讨论】:

【参考方案2】:

查看如何随机排列数组:How to randomize (shuffle) a javascript array?

然后您可以通过弹出最后 10 个元素或循环并收集前 10 个元素来获取该数组的前 20 个元素。这样它会比随机选择足够多的时间然后通过数组过滤重复项更快

【讨论】:

以上是关于JQuery - 将随机数添加到数组中,然后在打印数组之前检查是不是有重复的主要内容,如果未能解决你的问题,请参考以下文章

如何将整数添加到数组并获得随机数?

我正在尝试将对象添加到python中的数组中,然后打印数组的内容[重复]

jquery将元素移动到随机顺序

以数组大小 20 打印随机数并以索引号打印数字

如何将数组发送到子视图然后打印到标签中?

JQuery:将数字相乘到单独的数组,然后得到结果的总和