2016-05-23 57 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 =1開始迭代而不是i=0。我們首先需要的價值1
  3. i==1,輸出將是唯一1
  4. "1" + (Array(i).join("*")).toString() + i.toString()); Array(i).join('*')將Concat的*i次& i.toString()1 在你的代碼是(Array(n-1).join("*")).toString() + n.toString(); 我相信總會n作爲最後一位。所以每次輸出將1**n

希望這個片段將是有益的

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')); 

檢查你`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

這裏有兩種方法可以做到,但我建議後者。

字符串連接:

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));

相關問題