如何在控制台的一行中将两个多行字符串放在一起?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在控制台的一行中将两个多行字符串放在一起?相关的知识,希望对你有一定的参考价值。

我正在尝试使用文本艺术数字制作动态javascript数字时钟。由于数字是文本艺术,因此它们是多行字符串,并且在登录到控制台时显示在彼此的顶部。示例如下。

let time0 =`
 a8888a  
d8' ..8b 
88 .P 88 
88 d' 88 
Y8'' .8P 
 Y8888P`
let time1 =`
d88  
 88  
 88  
 88  
 88  
d88P`

我希望输出例如是下午12:03:52。在文本艺术中,但它是在这样的另一种类型之上

1
2
:
...
答案

您可以将所有字母合并为一个大块:

 function mergeDigits(...digits) {
  const result = [];

  for(const digit of digits) {
   for(const [index, row] of digit.split("\n").entries())
      result[index] = (result[index] || "") + row + " ".repeat(10 - row.length);
  }

  return result.join("\n");
}

console.log(mergeDigits(time0, time1));
另一答案

我的方法是通过qazxs在换行符(split)上将字符串转换为数组,然后一次记录一行:

\n
另一答案

我建议创建一个连接数字的函数,这里有一个例子:

let time0 =`
 a8888a  
d8' ..8b 
88 .P 88 
88 d' 88 
Y8'' .8P 
 Y8888P  `.split('\n')
let time1 =`
d88  
 88  
 88  
 88  
 88  
d88P`.split('\n')


for (let i = 1; i < time0.length; i++) {
  console.log(time0[i] + '  ' + time1[i]);
}
另一答案

我会建议这个功能。它会查找图案的高度,每个图案中每条线的宽度,以确保正确的对齐:

    let time0 =`
     a8888a  
    d8' ..8b 
    88 .P 88 
    88 d' 88 
    Y8'' .8P 
     Y8888P  `;
    let time1 =`
    d88  
     88  
     88  
     88  
     88  
    d88P`;

    function concat(number1, number2) {
       var parts1 = number1.split('\n');
       var parts2 = number2.split('\n');
       var result = [];
       parts1.forEach((line, index)=>{
           var line2 = parts2[index] || '';
           result.push(line + ' ' + line2);
       });
       return result.join('\n');
    }
    var result = concat(time0, time1);
    console.log(result)
另一答案

此版本以字符映射和要在它们之间放置的空格数开始,并返回一个函数,该函数接受一个字符串,将其拆分为字符并从中创建组合的文本艺术字符串。请注意,它并不关心字符是什么。它不会进行任何错误检查以确保所有字符都存在,并且它们的高度相同。这并不难添加。

function joinPatterns(...args) {
    const patterns = args.map(pat => pat.split(/[\n\r]+/));
    const widths = patterns.map(lines => Math.max(...lines.map(line => line.length)));
    const length = Math.max(...patterns.map(lines => lines.length));
    return Array.from({length}, (_, i) =>
        patterns.map((lines, j) => (lines[i]||"").padEnd(widths[j], " ")).join(" ")
    ).join("\n");
}

let time0 =`
 a8888a  
d8' ..8b 
88 .P 88 
88 d' 88 
Y8'' .8P 
 Y8888P`
let time1 =`
d88  
 88  
 88  
 88  
 88  
d88P`

const res = joinPatterns(time0, time1, time0);

console.log(res);

以上是关于如何在控制台的一行中将两个多行字符串放在一起?的主要内容,如果未能解决你的问题,请参考以下文章

如何在本机反应中将两个按钮放在同一行中?

如何在MySQL中连接两个字符串

如何在 Microsoft SQL Server Management Studio 中将多行合并为一行,用逗号分隔

如何在 BigQuery 中将多行聚合为一行?

你如何在熊猫中将多行连接成一行?

在 Laravel 5 中将多行从动态表单保存到数据库