如何修剪三角形内的空间

问题描述

由于某种原因,我只是无法让 .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()); 

如果任何人都可以使此混乱工作,也可以让最长的线触摸屏幕的左侧,可能需要从左侧修剪空间,但怕我会破坏金字塔形状。

解决方法

类似于您的第一个循环,其中打印初始空格集是问题的根本原因。金字塔的大小可以可变,当数字9小于9时,硬编码数字9会导致多余的空格。

一个简单的解决方法是在打印空格时记住金字塔的大小。您可以通过使用一个简单的包装函数来实现此目的,该函数将初始大小作为第二个参数提供给递归函数。

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