如何生成包含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"在它。
答案 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);
}
}
那里有很多优化空间。或者只使用一个简单的循环。