array.split创建一个包含多个空格的字符串

时间:2017-12-04 08:59:12

标签: javascript arrays whitespace

我正在尝试创建几个包含不同数量的空格的字符串。我已经能够使用数组执行此操作。(索引数).join("");

但是当我进入循环以添加更多字符串并在每个字符串中增加一定量的空格时,字符串将被设置为“未定义”。'我不确定我哪里出错了。该函数似乎在循环之外但不在内部。我做错了什么想法?



function towerBuilder(nFloors) {
    // build here
    var towers = [];
    var stars = "*";
    var spaceNo = nFloors -1;
    let spaces = Array(spaceNo).join(" ");
    spaceNo -= 1;
    towers[0] = spaces + stars + spaces;
    for(i = 1; i <= nFloors -1; i++)
    {
      stars = stars + Array(i + 2).join('*');
      let edges = Array(spaceNo).join(" ");
      towers[i] = edges + stars + edges;
      spaceNo -= 1;
    }
    

    return towers;
}
console.log(towerBuilder(3));
&#13;
&#13;
&#13;

在顶部,这有效:

 let spaces = Array(spaceNo).join(" ");

然而,在循环中,这会输出&#39; undefined&#39;

let edges = Array(spaceNo).join(" ");

这个想法是空间包裹星形符号,以便可以用数组构建塔。例如,调用towerBuilder(3)将输出以下内容:(我不需要使用回车输出它。仅数组就足够了。)

[
  '  *  ', 
  ' *** ', 
  '*****'
]

1 个答案:

答案 0 :(得分:1)

Array.join用于连接所有数组的值,并在它们之间使用给定的字符串:

['foo','bar'].join(',') // = 'foo,bar'

你期望Array(2).join(' ')是两个空格,但它只有一个,因为它连接了两个空值,中间有一个空格。

只需删除第5行的-1即可按预期工作:

&#13;
&#13;
function towerBuilder(nFloors) {
    // build here
    var towers = [];
    var stars = "*";
    var spaceNo = nFloors; // was nFloors - 1
    let spaces = Array(spaceNo).join(" ");
    spaceNo -= 1;
    towers[0] = spaces + stars + spaces;
    for(i = 1; i <= nFloors -1; i++)
    {
      stars = stars + Array(i + 2).join('*');
      let edges = Array(spaceNo).join(" ");
      towers[i] = edges + stars + edges;
      spaceNo -= 1;
    }
    

    return towers;
}
console.log(towerBuilder(3));
&#13;
&#13;
&#13;

顺便说一下,如果这样写的话看起来好多了:

&#13;
&#13;
function towerBuilder(nFloors) {
    // build here
    var towers = [];
    
    for(var floor = 0; floor < nFloors; floor++)
    {
      var nStars = (floor * 2) + 1;
      var stars = Array(nStars + 1).join('*');
      var edges = Array(nFloors - floor).join(" ");
      towers[floor] = edges + stars + edges;
    }

    return towers;
}
console.log(towerBuilder(3));
&#13;
&#13;
&#13;