我该如何修剪三角形内的空间

How do I go about trimming spaces within my triangle

出于某种原因,我无法让 .trim 为我工作。我想也许尝试将我的代码转换为字符串然后 trim 更好,但似乎也不能正确使用 toString 。到目前为止,这是我得到的:

function Pyramid(number) {
  if(number>0) {
    Pyramid(number-1);
    for(let z=9;  z>=(number-1);  z--) {
      document.write("  ");
    };
    for(let j=1; j<=number; j++) { //12345
      document.write(" "+j);
    };
    for(let k=number-1; k>0; k--) { // 54321
      document.write(" "+k);
    };
  }; 
  document.write("<br>");
};

Pyramid(5);
document.body.style.fontFamily = "monospace";

function myFunction() {
  var n = Pyramid(5).toString();
  document.write(n);
};

myFunction();

document.write(myFunction.trim()); 

如果有人能解决这个问题,让它最长的线触摸屏幕的左侧也很好,可能需要从左侧开始 trim 个空格,但担心我会毁了金字塔形状。

您的第一个循环似乎是您打印初始空格集的问题的根本原因。金字塔的大小可以是可变的,当大小小于 9 时,硬编码数字 9 将导致不需要的空间。

一个简单的work-around就是打印空格的时候要记住金字塔的大小。您可以通过一个简单的包装函数来实现这一点,该函数将初始大小作为第二个参数提供给您的递归函数。

function Pyramid(number) {
  buildPyramid(number, number);
}

function buildPyramid(currentVal, size) {
  if (currentVal > 0) {
    buildPyramid(currentVal - 1, size);
    for (let z = size; z > currentVal; z--) {
      document.write(" &nbsp;");
    }
    for (let j = 1; j <= currentVal; j++) {
      document.write(" " + j);
    }
    for (let k = currentVal - 1; k > 0; k--) {
      document.write(" " + k);
    }
  }
  document.write("<br>");
}
Pyramid(5);
document.body.style.fontFamily = "monospace";