繁体   English   中英

如何正确为变量创建for循环?

[英]How can I correctly make a for loop for my variables?

我这里有一个代码,可以获取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中,我只会得到开始文本,等待查询选择器替换。

将数字转换为字符串,然后:

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)); 

在填充时间执行此操作:

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;
}

我建议使用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); 

如果只想将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); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM