使用1-9的所有数字生成随机整数

时间:2014-03-28 08:21:24

标签: javascript

如何生成包含1-9所有数字的9位整数?如123456798,981234765,342165978等

这样做:

var min = 100000000;
var max = 999999999;
var num = Math.floor(Math.random() * (max - min + 1)) + min;

不起作用给我一个我想要的大部分时间(没有从1到9的所有数字)。


111111119是不可接受的,因为每个号码必须至少有一个" 1"在其中," 2"," 3",...和" 9"在它。

3 个答案:

答案 0 :(得分:11)

从字符串123456789开始,然后按How do I shuffle the characters in a string in JavaScript?

中的描述随机播放
String.prototype.shuffle = function () {
    var a = this.split(""),
        n = a.length;

    for(var i = n - 1; i > 0; i--) {
        var j = Math.floor(Math.random() * (i + 1));
        var tmp = a[i];
        a[i] = a[j];
        a[j] = tmp;
    }
    return a.join("");
}

答案 1 :(得分:4)

这个程序虽然调整很少,但对你的定制实用腰带来说是一个很好的补充。

改编自Underscore.js库的_.shuffle函数,该函数使用Fisher-Yates Shuffle algorithm对数据列表进行混洗。

function getRandomNumber() {
    var rand, index = 0, shuffled = [1, 2, 3, 4, 5, 6, 7, 8, 9];

    shuffled.forEach(function(value) {
        rand = Math.floor(Math.random() * ++index);
        shuffled[index - 1] = shuffled[rand];
        shuffled[rand] = value;
    });

    return shuffled.reduce(function(result, current) {
        return result * 10 + current;
    }, 0);
}

console.log(getRandomNumber());

此程序将始终返回一个数字,其中包含所有9个数字,长度也为9。

答案 2 :(得分:1)

递归!

var randomize = function (str) {
    if (str.length == 9) return str;
    var newDigit = Math.floor(Math.random()*9 + 1);
    if (str.indexOf(newDigit) == -1) {
        return randomize(str + newDigit);
    } else {
        return randomize(str);
    }
}

那里有很多优化空间。或者只使用一个简单的循环。

Working fiddle