生成一个没有重复数字的随机4位数
Generate a random 4 digit number with no repeating digits
我有这个函数来创建一个随机的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"
是否有有效的方法来做到这一点?
您可以使用这个方便的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() );
Edit:如果你想要一个不以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() );
创建一个数字数组,将其随机化,然后将前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('');
这取决于你想如何处理这个问题。一种解决方案是将已经使用过的数字存储在数组中,然后在生成数字时搜索该数组。如果生成的数字包含在数组中,则尝试生成另一个数字。如果您有几个不同的函数,那么像这样执行几个不同的步骤也更容易遵循。请看下面的例子:
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("");
}
作为更新,试试这个…
const value = (new Array(4))
.map(() => (Math.floor(Math.random() * 9) + 1).toString()).reduce((p, c) => p + c);
如果您同意将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>
这两个代码都使用random .js来简化随机性并使其更具可读性,所以如果您想使用它们中的任何一个,请不要忘记在HTML文档的头部添加script标记。
相关文章:
- 如何输出数字所需的有效位数
- 如何获取一个以零开头的数字的位数
- Javascript 正则表达式匹配字母数字,其中数字不限于一位数
- excel中数字格式时的小数位数
- Javascript-格式化数字,始终显示原始的小数位数
- RegExp:在任何数字之前插入位数
- 如何在Javascript中零填充浮点数字,并限制最大位数
- 如何使用列加法将位数无限的数字相加
- 数字中的小数位数和精度
- 数字的位数之和
- 在打字稿中将“布尔位数组”转换为数字
- Javascript:如何检索*字符串*数字的小数位数
- 将数字转换为十六进制值,但使它们成为两位数
- JavaScript 中一位数数字字符串的总和
- 简单添加数字的位数平方
- 将javascript中的数字四舍五入到特定小数位数的最佳方法
- 如何创建一个具有给定范围、四分位数和中位数的数字列表
- HTML:添加逗号和数字的有限小数位数
- 如何将一个数字分成n位数的组
- Angular JS-如何验证数字输入中的位数