2017-07-29 7 views
2

私は '1'の文字列値を受け取り、それに '0'を加えるこの関数を持っています。関数を何回ループするか?

問題は、設定した回数だけ機能を使いたいということです。 つまり、数値が '1' '0' '1' '0' '1' '0'になり、結合関数を使用して1つの値として配列に格納されるように、6回移動します。

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の中に戻ります。これはただ1回の反復の後に戻ります。

私はこれがあなたが望むものに近いと思います。

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(); 
} 
関連する問題