制作一个字符串模式

时间:2016-05-23 03:09:05

标签: javascript for-loop

我正在尝试使用以下代码:

图案(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”);

3 个答案:

答案 0 :(得分: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"));

答案 1 :(得分: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));

答案 2 :(得分:2)

我做了一些改动并略微修改了逻辑。

  1. 让输出为数组而不是字符串。
  2. i =1而不是i=0开始迭代。我们需要第一个值为1
  3. i==1时,输出将仅为1
  4. "1" + (Array(i).join("*")).toString() + i.toString());  Array(i).join('*')*i次&amp; 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'));
  5. 希望此代码段有用

    Server [localhost]:
    Database [postgres]:
    Port [5433]:
    Username [postgres]:
    psql (9.2.17)
    WARNING: Console code page (850) differs from Windows code page (1252)
             8-bit characters might not work correctly. See psql reference
             page "Notes for Windows users" for details.
    Type "help" for help.
    
    postgres=# createdb gps_heatmap
    postgres-# \l
                                              List of databases
       Name    |  Owner   | Encoding |       Collate       |        Ctype        |   Access privileges
    -----------+----------+----------+---------------------+---------------------+-----------------------
     database4 | postgres | UTF8     | English_Canada.1252 | English_Canada.1252 |
     postgres  | postgres | UTF8     | English_Canada.1252 | English_Canada.1252 |
     template0 | postgres | UTF8     | English_Canada.1252 | English_Canada.1252 | =c/postgres          +
               |          |          |                     |                     | postgres=CTc/postgres
     template1 | postgres | UTF8     | English_Canada.1252 | English_Canada.1252 | =c/postgres          +
               |          |          |                     |                     | postgres=CTc/postgres
    (4 rows)
    
    
    postgres-#
    

    选中此jsfiddle