如何在网址末尾应用非重复随机数?

时间:2019-02-20 18:30:46

标签: jquery html

我正在开发一个推荐小部件,该小部件在博客文章的底部显示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();
  }  

});

2 个答案:

答案 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)

Random Item from an Array

此表达式来自上面的链接:

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));