如何获得JavaScript / jQuery中没有重复数字的随机数?

时间:2018-04-28 05:04:53

标签: javascript

更新:数字可以从零开始。

我想要一个像

这样的功能
function getRandomNumber(n){
  ...
}

我希望它获得一个n位的数字,而没有任何数字重复。例如:

getRandomNumber(3) -> 152 is what I want.
getRandomNumber(1) -> 6 is what I want.
getRandomNumber(6) -> 021598 is what I want. It can start with zero.
getRandomNumber(5) -> 23156 is what I want.
getRandomNumber(3) -> 252 is not because it has two 2.
getRandomNumber(5) -> 23153 is not because it has two 3.

有任何简单的方法吗?

3 个答案:

答案 0 :(得分:1)

在每次调用时,创建一个数字数组,然后重复选择随机值并从所述数组中删除它们:



function getRandomNumber(n){
  const digits = Array.from({ length: 10 }, (_, i) => i);
  const result = Array.from({ length: n }, () => {
    const randIndex = Math.floor(Math.random() * digits.length);
    const digit = digits[randIndex];
    digits.splice(randIndex, 1);
    return digit;
  });
  return Number(result.join(''));
}


Array.from({ length: 10 }, () => console.log(getRandomNumber(8)));




答案 1 :(得分:1)

通过将数组保持为哈希映射,有效的解决方案如下。但请记住,除非它是一个字符串,否则数字不能以0开头。

function getRandomNumber(n){
    var a = [],
        x = ~~(Math.random()*10),
        r = 0;
    while (n) {
      a[x] === void 0 && (a[x] = true, r += x*Math.pow(10,n-1), --n);
      x = ~~(Math.random()*10);
    }
    return r;
}

console.log(getRandomNumber(3));
console.log(getRandomNumber(4));
console.log(getRandomNumber(5));
console.log(getRandomNumber(6));
console.log(getRandomNumber(7));

答案 2 :(得分:0)

不要如何处理javascript,但如果它可以帮助你,这里有一行scala做这个工作

def obtainRestrictedRandomNumber(): Long = scala.util.Random.shuffle((0 to 9)).mkString("").toLong

它的作用是简单地生成从0到9的所有数字,然后将它们随机化,将Array Int元素连接成一个字符串,最后将其转换为Long。