在 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);
我正在 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);