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

时间:2019-01-02 15:29:21

标签: javascript for-loop

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

4 个答案:

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