从 console.table() 中删除索引

Remove index from console.table()

我正在控制台中查看一组数据。

console.table(myArray) 始终将索引作为第一列。 这在查看对象数据时很好,当索引是键时,但当索引是数组索引时则不行(在我的例子中,它会分散注意力/烦人/从内容中消失)。 没有这个索引,有什么办法可以显示 table 吗? 可选的 columns 参数允许只显示想要的列...除了索引。

如图MDN Web docs

The first column in the table will be labeled (index). If data is an array, then its values will be the array indices. If data is an object, then its values will be the property names. Note that (in Firefox) console.table is limited to displaying 1000 rows (first row is the labeled index).

因此对于数组,您不能隐藏要显示的索引键。但是,作为一种解决方法,您可以将数组转换为使用 您的 键的对象。

示例:(打开控制台查看结果)

const array = [{myId: 42, name: 'John', color: 'red'}, {myId: 1337, name: 'Jane', color: 'blue'}]

const transformed = array.reduce((acc, {myId, ...x}) => { acc[myId] = x; return acc}, {})

console.table(transformed)

如果您使用的是节点(不是浏览器)并且您想要一个不引入依赖项的解决方案,您可以这样做:

(建立在 之上):

const { Console } = require('console');
const { Transform } = require('stream');

function table(input) {
  // @see 
  const ts = new Transform({ transform(chunk, enc, cb) { cb(null, chunk) } })
  const logger = new Console({ stdout: ts })
  logger.table(input)
  const table = (ts.read() || '').toString()
  let result = '';
  for (let row of table.split(/[\r\n]+/)) {
    let r = row.replace(/[^┬]*┬/, '┌');
    r = r.replace(/^├─*┼/, '├');
    r = r.replace(/│[^│]*/, '');
    r = r.replace(/^└─*┴/, '└');
    r = r.replace(/'/g, ' ');
    result += `${r}\n`;
  }
  console.log(result);
}

const test = [
  { name: "Jane", id: '1234', pastime: 'Archery' },
  { name: "John", id: '1235', pastime: 'Knitting' },
  { name: "Jess", id: '1236', pastime: 'Fishing' }
];

table(test);

此 table 中没有索引列的结果:

┌────────┬────────┬────────────┐
│  name  │   id   │  pastime   │
├────────┼────────┼────────────┤
│  Jane  │  1234  │  Archery   │
│  John  │  1235  │  Knitting  │
│  Jess  │  1236  │  Fishing   │
└────────┴────────┴────────────┘