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



我想写一个"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);
}
}
});

如果我只关注题目。

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

除了"假设"&;用例建议重复"对现有数组进行洗牌";那太好了。如果您想创建一个具有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()检查而不存在时才会返回。

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

查看如何洗牌数组:如何随机化(洗牌)一个JavaScript数组?

然后你可以取该数组的前20个元素,要么取出最后10个元素,要么循环并收集前10个元素。这样比随机选择足够的次数,然后在数组中筛选重复项

要快。

最新更新