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
长度的值在 min
和 max
之间的唯一数字数组,方法如下:
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))
如果给定min
和max
,请求的amount
是可能的,该函数将返回一个非空数组。
有一个条件可以避免while
的无限循环。因此,如果提供的参数不允许找到所需数量的唯一数字,它将返回一个空数组。
工作原理:
while
没有达到amount
,继续尝试添加一个新的随机数。
仅当由于.indexOf()
检查而不存在时,才会将数字添加到要返回的数组中。
对返回的数组做任何你想做的事情。
【讨论】:
【参考方案2】:查看如何随机排列数组:How to randomize (shuffle) a javascript array?
然后您可以通过弹出最后 10 个元素或循环并收集前 10 个元素来获取该数组的前 20 个元素。这样它会比随机选择足够多的时间然后通过数组过滤重复项更快
【讨论】:
以上是关于JQuery - 将随机数添加到数组中,然后在打印数组之前检查是不是有重复的主要内容,如果未能解决你的问题,请参考以下文章