如何循环遍历一个函数一组次数?
问题描述:
我有这个函数,它接受'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.
}
答
你需要恢复之前的状态,检查数组大小等于什么问:
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();
}
'回报num.join();'了'for'循环外。现在它在循环的第一次迭代结束时返回 – tymeJV