我这里有一个代码,可以获取0到45之间的6个NON重复数字,到目前为止,它可以正常工作,除了我希望循环更改我的数字,以便如果数字小于10,则在其前面添加一个0,这样每个数字的格式都为“ xx”,例如“ 07”,“ 25”,“ 00”
我正在尝试为我的代码创建一个for循环,但是每次尝试都会中断。我正在尝试使用此for循环来减少代码长度。
我的代码现在可以正常工作了,但是我有一个讨厌的6 if语句。
我已经准备好尝试:
var z;
for (z = 1; z < 7; z++) {
if (n[z] < 10) {
n[z] = "0" + n[z];
}
}
这是我的代码:
function randomNo(){
function arrayShuffle () {
var i = this.length, j, temp;
if ( i === 0 ) return false;
while ( --i ) {
j = Math.floor( Math.random() * ( i + 1 ) );
temp = this[i];
this[i] = this[j];
this[j] = temp;
}
}
Array.prototype.shuffle =arrayShuffle;
var start = 0;
var end = 45;
var numbers = new Array();
for (var i = start; i <= end; i++) {
numbers.push(i);
}
numbers.shuffle();
var n1 = numbers.pop();
var n2 = numbers.pop();
var n3 = numbers.pop();
var n4 = numbers.pop();
var n5 = numbers.pop();
var n6 = numbers.pop();
// Should replace for a for loop, but I cant figure it out
// Replace in html
console.log(n1);
console.log(n2);
console.log(n3);
console.log(n4);
console.log(n5);
console.log(n6);
}
randomNo();
每次尝试for循环时,我的数字都完全停止工作,并且在HTML中,我只得到开始文本,等待查询选择器替换。
答案 0 :(得分:2)
将数字转换为字符串,然后:
1)使用padStart
字符串方法:
function ex(inp) {
return inp.toString().padStart(2, '0');
}
console.log(ex(1));
console.log(ex(154));
console.log(ex(9));
2)检查字符串的长度,如果长度小于2,则添加前导0:
function ex(numb) {
return numb.toString().length < 2 ? `0${numb}` : numb;
}
console.log(ex(1));
console.log(ex(154));
console.log(ex(13));
console.log(ex(9));
答案 1 :(得分:0)
在填充时间执行此操作:
for (var i = start; i <= end; i++) {
numbers.push((i < 10 ? "0" : "") + i); // This will generate "08", "09", "10"
}
但是,如果您只想要6个随机数组成的数组(介于0到45之间),则可以生成6个空(未定义)元素的数组,将它们循环并用0〜45的随机数填充:
let numbers = Array.from(Array(6)).map(() => {
let n = Math.floor(Math.random()*46);
return (n < 10 ? "0" : "") + n
})
console.log(numbers)
...然后可以循环遍历:
for(let num in numbers){
document.querySelector(`.rn${num}`).innerText = num;
}
答案 2 :(得分:0)
我建议使用map()
function arrayShuffle () {
var i = this.length, j, temp;
if ( i === 0 ) return false;
while ( --i ) {
j = Math.floor( Math.random() * ( i + 1 ) );
temp = this[i];
this[i] = this[j];
this[j] = temp;
}
}
Array.prototype.shuffle =arrayShuffle;
var start = 0;
var end = 45;
var numbers = new Array();
for (var i = start; i <= end; i++) {
numbers.push(i);
}
numbers.shuffle();
numbers = numbers.map(function (n) {
return n < 10 ? "0" + n : n.toString();
});
console.log(numbers);
答案 3 :(得分:-1)
如果您的想法只是将6个随机的'int.toString'2位数字值放入6个具有相同前缀名称和0到46之间的数字的JS变量中,则无需创建包装器或Array:
var randomIntStr = {
_list : [],
GetNoRepeat(max) {
let r = 0;
do { r = Math.floor(Math.random() * Math.floor(max)); }
while (this._list.includes(r));
this._list.push(r);
return r < 10 ? "0" + r : r.toString();
}
};
for (let i=1; i<7;i++) {
window['n'+i] = randomIntStr.GetNoRepeat(46);
}
console.log('n1 =', n1);
console.log('n2 =', n2);
console.log('n3 =', n3);
console.log('n4 =', n4);
console.log('n5 =', n5);
console.log('n6 =', n6);