2016-05-23 5 views
1

私は次のように動作するように、次のコードを取得しようとしている:作る文字列パターン

パターン(4):私は現在持っているものだ

1 
1*2 
1**3 
1***4 


function pattern(n){ 
    var output = ""; 
    for (var i = 0; i < n; i++) { 
    output[i] = "1" + (Array(n-1).join("*")).toString() + n.toString(); 
} 

return output; 
} 

。私はコードを実行すると空白の戻り値を得ています。誰かがここに正しい方向に向けることができますか?ありがとうございました!

例のテストクラス:Test.assertEquals(pattern(3)、 "1 \ n1 * 2 \ n1 ** 3");

+0

:'出力= "" '、文字列は不変ですjavascriptでは、 'output [3] =" a "'のように、その部分を変更することはできません。新しい文字列を作る必要があります。 –

答えて

2

私はいくつかの変更を行い、ロジックを少し変更しました。

  1. 出力を文字列ではなく配列にします。
  2. i=0の代わりにi =1から繰り返しを開始します。i==1、出力のみ1
  3. "1" + (Array(i).join("*")).toString() + i.toString()); Array(i).join('*')あなたはそれが私がいつもnと信じ(Array(n-1).join("*")).toString() + n.toString(); であるあなたのコードでは1*i回& i.toString()をCONCATうになりますときに私たちは1
  4. として最初の値を必要とします最後の桁としてだから、毎回出力は、このスニペットが役に立つ

    function pattern(n){ 
        var output = []; 
        for (var i = 1; i <= n; i++) { 
        if(i==1){ 
        output.push("1") 
        } 
        else if(i>1){ 
        output.push("1" + (Array(i).join("*")).toString() + i.toString()); 
    } 
    } 
    
    return output; 
    } 
    var m = pattern(5); 
    console.log(m.join('\n')); 
    

    チェックされます1**n

希望になりますが、文字列であることoutput` `持ってこのjsfiddle

+0

ありがとうございます!これは非常に役に立ちました。最終的なコードはここにあります:https://jsfiddle.net/Wahoowa14/vbsz2x6a/ output.join( "\ n")が機能する理由を説明しますか?私はそこで何が起こっているのかよく分かりません。 – wahoowa

+1

@wahoowa新しい行を作成しています – brk

2

outputは配列にすることができ、新しい項目をその上にプッシュすることができます。

function pattern(n){ 
    var output = []; 
    for (var i = 0; i < n; i++) { 
    output.push("1" + (Array(n-1).join("*")).toString() + n.toString()); 
    } 
    return output; 
} 

関数の出力は、いくつかのことを注意することは、新しい行

var output = pattern(4); 
console.log(output.join("\n")); 
2

を使用して戻って一緒に参加することができるはず配列を、次のようになります。

  • @PatrickEvansが述べているように、JSの文字列は不変なので、文字列内の文字要素を変更しようとしても機能しません。各文字列の末尾

  • 増加アスタリスク*および数字のパターンは、静的nしない必要とするが、インクリメントi

私は後者をお勧めしますが、ここでは2つの方法があります。

文字列連結:

function pattern(n){ 
 
    var output = ""; 
 
    for (var i = 0; i < n; i++) { 
 
    if (!i) output = "1"; 
 
    else output += "\n1" + (Array(i+1).join("*")).toString() + (i+1).toString(); 
 
    } 
 
    return output; 
 
} 
 

 
console.log(pattern(4));

アレイに参加:

function pattern(n) { 
 
    var output = []; 
 
    for (var i = 0; i < n; i++) { 
 
    if (!i) output.push("1"); 
 
    else output.push("1" + (Array(i+1).join("*")).toString() + (i+1).toString()); 
 
    // ES6: else output.push(`1${'*'.repeat(i)}${i+1}`); 
 
    } 
 
    return output.join('\n'); 
 
} 
 

 
console.log(pattern(4));

関連する問題