如何循环遍历一个函数一组次数?

问题描述:

我有这个函数,它接受'1'的字符串值并为其添加'0'。如何循环遍历一个函数一组次数?

问题是我希望它通过该功能设定的次数。 即我希望它去6次,所以数字结束为'1''0''1''0''1''0',然后使用连接函数将它们作为一个数组中的一个单一值

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

+1

'回报num.join();'了'for'循环外。现在它在循环的第一次迭代结束时返回 – tymeJV

你需要恢复之前的状态,检查数组大小等于什么问:

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

>是一个安全,以避免无限循环时size小于2.调用函数时不要忘记传递size

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

这样的功能更好的设计是:

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

而且,甚至有一个String#repeat功能:

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

+0

感谢您的帮助!我是开发新手,所以我仍然在好的和坏的习惯之间学习!我很高兴这个社区能够对像我这样的新开发者有所帮助 – dutchkillsg

几个问题:

您的回路中没有使用通过的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)) 

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

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

    return result; 
} 

/** 
* 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(); 
}