如何循环一个函数一定次数?

时间:2017-07-29 19:47:49

标签: javascript

我有这个函数,它接受字符串值'1'并为它添加一个'0'。

问题在于我希望它能够完成设定次数的功能。 即我希望它去6次,所以数字最终为'1''''1''0''1''0'然后使用join函数将它们作为数组中的单个值

alert(stringy());

//write a function that names stringy
function stringy(size) {

  //create and empty array to hold new value
  var num = []
  //push a the string value of 1 into array
  num.push('1')
  //loop through the array and if the variable equals 1 then push a 0
  for (i = 0; i < num.length; i++) {
    if (num[i] == '1') {
      num.push('0')
      //if num has 0 in in it push 1
    } else if (num[i] == '0') {
      num.push('1')
    }
    //numbers return two values in array but does not specify how many goes in.
    return num.join();
  } //incomplete: only shows '1,0' in output one time.
}

4 个答案:

答案 0 :(得分:3)

在返回之前需要一个条件,检查数组大小是否等于要求:

if (num.length >= size) {
    return num.join();
}

>小于2时,size是避免无限循环的安全措施。在调用函数时,不要忘记传递size

请注意,在迭代时添加到数组是不好的做法:这可能会造成混淆,并导致未检测到的错误。我似乎明白你在课程或其他方面将此作为模板。如果是这样,请忘记这种工作方式。

这种功能的更好设计是:

&#13;
&#13;
function stringy(size){
    return Array.from(Array(size), (_, i) => 1-(i%2)).join('');
}
console.log(stringy(5));
console.log(stringy(6));
&#13;
&#13;
&#13;

而且,甚至还有一个String#repeat函数:

&#13;
&#13;
function stringy(size){
    return '10'.repeat(size/2+1).substr(0,size);
}
console.log(stringy(5));
console.log(stringy(6));
&#13;
&#13;
&#13;

答案 1 :(得分:1)

一些问题:

您未在循环中使用传递的size。并且你在for中返回,只在一次迭代后返回。

我认为这更接近你想要的东西;

function stringy(size){

    var num=[]
    num.push('1')
    for(i=0; i < size; i++){
        if(num[i]=='1'){
            num.push('0')
        } else if(num[i]=='0'){
        num.push('1')    }
    }
    return num.join();
}

您还可以简化一些有助于提高可读性的内容:

function stringy(size){
    var num=[1]
    for(i=0; i < size; i++){
        num.push( num[i]==1 ? 0 : 1)
    }
    return num.join();
}
console.log(stringy(6))

答案 2 :(得分:0)

function something(size) {
    var iterations = Math.floor(size / 2);
    var result = '';

    for (var index = 0; index < iterations; index++) {
        result += '10';
    }

    return result;
}

答案 3 :(得分:0)

/**
 * Use modulo operator:
 * The modulo operator (%) returns the division remainder.
 * So:
 *      0/2 = 0
 *      1/2 = 1
 *      2/2 = 0
 *      3/2 = 1
 *      4/2 = 0
 * @param size int Array size.
 * @return string Joined array: "1,0,1,0,1,0,..."
 */
function stringy(size) {
    var num = [];

    for (var i = 0; i < size; i++) {
        num.push((i % 2 === 0) ? 1 : 0);
    }

    return num.join();
}