我正在开发一个推荐小部件,该小部件在博客文章的底部显示4条随机文章。
为此,我需要在URL的末尾附加一个介于0到5之间的随机数。这个数字不能重复。另外,只需执行该功能,直到显示4篇文章。
目前,已生成随机数,但它们会重复。 如何在下面编写jQuery代码,以使这些数字不再重复?
HTML
<div class="recommended""></div>
jQuery
$(window).on("load", function() {
var digits = [];
for(var i = 0; i < 5; i++)
digits.push(i);
function timer() {
var digit = digits.splice( Math.floor( Math.random() * digits.length ), 1 );
var blogUrl = 'www.website.com/';
var together = blogUrl + digit;
$.get(together, function(data) {
var recommendedArticles = $(data).find(".blog-title a");
$(".recommended").append(recommendedArticles);
});
}
var articleCount = $(".recommended a").length;
for (; articleCount < 4; articleCount++) {
timer();
}
});
答案 0 :(得分:1)
您可以使用简单的随机播放来获取0-5范围内的4个随机数
function randomNumber() {
const arr = [0,1,2,3,4,5];
for( var i = 0 ;i < 6 ; ) {
const a = Math.floor( Math.random() * 6);
const b = Math.floor( Math.random() * 6);
if(a === b) { continue;}
let temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
i++;
}
return arr.slice(0,4);
}
答案 1 :(得分:0)
此表达式来自上面的链接:
let digit = array[Math.floor(Math.random() * array.length)];
在下面的演示中,对表达式进行了修改,以从数组中选择随机元素并引用常量的数组长度。
const digits = [0, 1, 2, 3, 4, 5];
/*
@Params: array - an array of integers
limit - an integer that determines the minimum length of
returned array
@Return: A copy of the given array with a random order at the
minimum length of the given limit
*/
function mixDigits(array, limit) {
let temp = [...array];
let mixed = [];
for (let i = 0; i < limit; i++) {
let digit = temp[Math.floor(Math.random() * array.length)];
let picked = temp.splice(digit, limit);
mixed.push(picked);
}
while (mixed.flat().length < limit) {
mixed.length = 0;
return mixDigits(array, limit);
}
return mixed.flat();
}
console.log(mixDigits(digits, 4));