2017-07-29 153 views
2

我有這個函數,它接受'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

回答

3

你需要恢復之前的狀態,檢查數組大小等於什麼問:

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

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)) 
0
function something(size) { 
    var iterations = Math.floor(size/2); 
    var result = ''; 

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

    return result; 
} 
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(); 
} 
相關問題