【问题标题】:Multiline `console.table({a: "aaa\naaa", b: "bbb\nbbb"})` for node多行`console.table({a: "aaa\naaa", b: "bbb\nbbb"})` 用于节点
【发布时间】:2021-03-13 14:09:42
【问题描述】:

有没有办法在节点中绘制多行表?我试过这个:

console.table({a: "aaa\naaa", b: "bbb\nbbb"})

但这只是删除所有换行符:

【问题讨论】:

  • 如果没有现成的解决方案,你总是可以走硬路,自己建表 ascii-art(严格来说是 unicode-art)。不过,这有点工作。也许存在一个包,例如console-table-printer(不是说好,只是我找到的第一个相关包)

标签: javascript node.js command line


【解决方案1】:

解决方案 #1

试试这个,但不确定它是否是一个好的解决方案:

console.table(
  {
    a: "aaa",
    "": "aaa",
    b: "bbb",
    " ": "bbb"
  }
)

输出:

解决方案 #2

我们的想法是不要弄乱默认索引并创建自己的名为 label 的列。

console.table([
  { Label: "a", Values: "aaa" },
  { Values: "aaa" },
  { Label: "b", Values: "bbb" },
  { Values: "bbb" },
]);

输出:

【讨论】:

  • 哇,这是一个非常有趣的想法,可以借鉴!
  • 再次感谢您提供这么好的想法,我发布了一个更长的脚本,它可以自动为您提供通用输入解决方案,并为不同长度的字符串提供良好的输出
【解决方案2】:

感谢 Dheemanth Bhat 的惊人创意,此解决方案基于此:

/**
 * @param {object} data
 * @see https://stackoverflow.com/questions/66614444/multiline-console-tablea-aaa-naaa-b-bbb-nbbb-for-node
 */

export function consoleTableNewline(data) {
  var tmp = [];
  for (var i in data) {
    var val = data[i];
    var parts = val.split('\n');
    var maxLen = parts.reduce((acc, cur) => Math.max(cur.length, acc), 0);
    parts = parts.map(x=>x.padEnd(maxLen));
    for (var j=0; j<parts.length; j++) {
      var part = parts[j];
      var key = i;
      var obj = {};
      if (j == 0) {
        obj.key = key;
      }
      obj.val = part;
      tmp.push(obj);
    }
  }
  console.table(tmp);
}

它负责创建漂亮的输出(所有行的长度完全相同,否则看起来会高度失真)。

【讨论】:

    【解决方案3】:

    你可以试试这个方法。

    1. 对象数组。

      let a = {firstName:"Jane", lastName:"Smith"};
      let b = {firstName:"John", lastName:"Smith"};
      let c = {firstName:"Emily", lastName:"Smith"};
      console.table([a, b, c]);
      

    1. 属性为对象的对象

      var family = {};
      family.a = {firstName:"Jane", lastName:"Smith"};
      family.b = {firstName:"John", lastName:"Smith"};
      family.c = {firstName:"Emily", lastName:"Smith"};
      console.table(family);
      

    【讨论】:

    • 这既不是节点也不是多行,你看问题了吗?
    • 试一试,看看它是否在您的节点中打印与上述其他答案类似的相同内容。为了方便起见,我尝试了浏览器控制台,仅此而已。
    猜你喜欢
    • 1970-01-01
    • 2019-10-04
    • 2015-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    相关资源
    最近更新 更多