在 Javascript 中,如何并排打印 2 张图表?

In Javascript, how do I print 2 diagrams side by side?

我正在 Practice.it 上做一道 JavaScript 练习题,有一道并排打印 2 艘火箭飞船的题目。

我打印了一个,但我不知道如何在第一个旁边打印另一个火箭飞船。

此外,有没有办法使用 for 循环来做到这一点?

function rocket(){
  triangle();
  line();
  sides();
  line();
  console.log("|Rocket |");
  console.log("|  #1   |");
  line();
  sides();
  line();
  triangle(); 
}

function triangle(){
  console.log("   / \");
  console.log("  /   \");
  console.log(" /     \");
}

function line(){
  console.log("+-------+");
}

function sides(){
  console.log("|       |");
}

rocket();

输出:

   / \
  /   \
 /     \
+-------+
|       |
+-------+
|Rocket |
|  #2   |
+-------+
|       |
+-------+
   / \
  /   \
 /     \

您应该将图表字符串放在一个数组中,而不是在您的函数中以正确的方式记录。

例如:

function triangle(){
  return 
  ["   / \", 
  "  /   \",
  " /     \"]
}

那样的话,如果你想并排打印两个,你只需创建一个接收图表的函数,以及用于水平分隔它们的一定数量的空格。该函数将逐行打印图表(按数组的索引索引)。

例如:

function printDiagrams(diagramList /* This is an array of arrays */, spacing) {
  // Get the size of the biggest array in diagramList
  var size= biggestDiagramSize(diagramList )
  // Here, you iterate in the diagrams array line by line and print
  for(i = 0, i < size, i++ ) {
    // Iterate over diagramList and print its lines
    // Careful not to exceed arrays bound.
    // Ex: console.log(diagram1[i] + spacing + diagram2[i] + spacing + diagramN[i])
  }

}

您还需要一个函数来组成图表。它只接收数组和 returns 它们的串联。

注意:即使您并排打印不同的图表,这也有效。

一种快速而肮脏的方法就是将每个字符串与其自身连接起来。因此,对于 console.log("+--------+") 的每个实例,请使用:

console.log("+--------+".repeat(2));

对每个字符串都这样做。

您可以为rocket函数定义一个参数,在函数中使用String.prototype.repeat()String.prototype.replace()来并排绘制N个图表。

function rocket(n = 1) {
  let props = ["|Rocket |", "|  #N   |"];
  let j = 0;
  let s = props[1].match(/\s+(?=\|)/)[0].length;
  triangle(n);
  line(n);
  sides(n);
  line(n);
  for (var i = 0; i < props.length; i++) {
console.log(
  props[i]
  .repeat(n)
  .replace(/(N)(\s+(?=\|))/g
  , (_, a, b) => ++j + (j >=10 ? " ".repeat(s-1) : b)));
  }
  line(n);
  sides(n);
  line(n);
  triangle(n); 
}

function triangle(n){
  var props = ["   / \   ", "  /   \  ", " /     \ "];
  draw(props, n);
}

function line(n){
  var props = ["+-------+"];
  draw(props, n);
}

function sides(n){
  var props = ["|       |"];
  draw(props, n);
}

function draw(props, n) {
  for (var prop of props) console.log(prop.repeat(n));
}

rocket(15);