我有这个功能来创建一个随机的4位数字
generateCode = function(){
var fullNumber = [];
var digit1 = Math.floor(Math.random() * 9) + 1;
var digit2 = Math.floor(Math.random() * 9) + 1;
var digit3 = Math.floor(Math.random() * 9) + 1;
var digit4 = Math.floor(Math.random() * 9) + 1;
fullNumber.push(digit1, digit2, digit3, digit4);
this.theCode(fullNumber.join("")) ;
}
但我需要创建一个没有重复数字的4位数随机数。 所以“1234”或“9673”......但不是“1145”或“5668”
任何帮助都非常感谢!不确定以有效的方式来到这个
答案 0 :(得分:5)
您可以使用this handy shuffle
函数来混洗包含数字的数组,并选择前4个。
function random4Digit(){
return shuffle( "0123456789".split('') ).join('').substring(0,4);
}
function shuffle(o){
for(var j, x, i = o.length; i; j = Math.floor(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
return o;
}
alert( random4Digit() );
修改:如果您确实想要一个不以0开头的数字:
function random4DigitNumberNotStartingWithZero(){
// I did not include the zero, for the first digit
var digits = "123456789".split(''),
first = shuffle(digits).pop();
// Add "0" to the array
digits.push('0');
return parseInt( first + shuffle(digits).join('').substring(0,3), 10);
}
function shuffle(o){
for(var j, x, i = o.length; i; j = Math.floor(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
return o;
}
alert( random4DigitNumberNotStartingWithZero() );
答案 1 :(得分:2)
创建一个数字数组,将其随机化,然后切出前4个并将它们连接在一起。
var numbers = [0,1,2,3,4,5,6,7,8,9];
function shuffleArray(array) {
for (var i = array.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var temp = array[i];
array[i] = array[j];
array[j] = temp;
}
return array;
}
shuffleArray(numbers).slice(0,4).join('');
答案 2 :(得分:0)
这实际上取决于你如何处理这个问题。一种解决方案是将已经使用过的数字存储在数组中,然后在生成数字时搜索数组。如果生成的数字包含在数组中,那么您尝试生成另一个数字。如果您有一些不同的功能,那么执行这样的几个不同的步骤也更容易理解。请参阅下面的示例:
var checkRandomUsed = function(array, number){
return array.indexOf(number) > -1;
}
var getCheckedRandom = function(array){
var random = getRandomNum();
while (checkRandomUsed(array, random)){
random = getRandomNum();
}
return random;
}
var getRandomNum = function(){
return Math.floor(Math.random() * 9) + 1;
}
var generateCode = function(){
var usedNumbers = [];
for (var i = 0; i < 4; i++){
usedNumbers.push(getCheckedRandom(usedNumbers));
}
return usedNumbers.join("");
}
答案 3 :(得分:0)
作为更新,请尝试...
const value = (new Array(4))
.map(() => (Math.floor(Math.random() * 9) + 1).toString()).reduce((p, c) => p + c);
答案 4 :(得分:0)
如果可以的话,可以用0作为第一位数字来完成此操作:
var getNum = () => randoSequence(0, 9).slice(-4).join("");
console.log(getNum());
<script src="https://randojs.com/1.0.0.js"></script>
这将使第一位数字不为0:
function getNum(){
var sequenece = randoSequence(0, 9).slice(-4);
return (sequenece[6] ? sequenece.slice(-4) : sequenece.slice(0, 4)).join("");
}
console.log(getNum());
<script src="https://randojs.com/1.0.0.js"></script>
这两个代码都使用rando.js来简化随机性并使其更具可读性,因此,如果要使用它们中的任何一个,请不要忘记将script标签添加到HTML文档的开头。 / p>