【问题标题】:Template literal interpolation breaks whitespace table模板文字插值打破了空白表
【发布时间】:2016-03-25 06:32:19
【问题描述】:

在使用模板文字时,我注意到表格格式存在问题。

当做这样的事情时:

var hello = 'Hello',
    bye = 'Goodbye';
console.log(`
    ${hello}    World
    ${bye}      World
`);

因为 {bye} 部分比 'Goodbye' 少四个字母,所以字符串打印为:

    Hello    World
    Goodbye      World

这对于数组或对象的插值变得更加复杂。

我想知道是否有人想出了解决此类问题的方法。在插值期间可以保留字符串的间隔表格格式。


假设现在一个模板标签使用字符串和数组。数组由单词之间的空格连接。

var hello = 'Hello',
    bye = 'Goodbye',
    phrase = ['I', 'like'];

console.log(someTag`
    ${hello}         World
    ${bye}           World
    Some things I like:
    ${phrase}        sunsets.
    ${['I', 'like']} candy.
`);

以防万一你不能告诉数组方括号、引号、美元、花括号等在插值之前计入字符串的长度(视觉上)。插值后单词之间的空格计入字符串长度。缩进会受到额外字符丢失和标签处理过程中添加字符的影响。

这个问题有一个公认的答案,但我希望看到更多讨论。这个问题可能有多个答案。

【问题讨论】:

  • 没有模板字符串你将如何解决这个问题?
  • 非常有趣。这种事情有表格格式化程序和填充程序,但我没想到以对空白友好而闻名的模板字符串也会出现同样的问题。此外,如果其他一些标记功能需要插入,而表格格式化程序/填充程序只生成一个字符串,该怎么办。是的,这个问题已经在其他地方解决了,但对于这些模板文字来说,这是一个全新的问题。我想另一种选择就是不要将它们用于这种事情。
  • 默认情况下,模板文字对空格没有任何作用,它们的行为本质上类似于带有插值的字符串。如果您想要更高级的行为,您需要使用标记的模板文字来进行您正在寻找的转换。
  • @loganfsmyth 我知道。字符串的长度在 ${} 字符和模板标签内的各种其他操作中丢失。有时它也会变长。

标签: javascript ecmascript-6 template-literals


【解决方案1】:

您可以使用制表符来补偿单词的不同长度:

const hello = 'Hello';
const bye = 'Goodbye';
const str = `
    ${hello}\t World
    ${bye}\t World
`;

console.log(str);
document.getElementById('demo').innerText = str;
<pre id="demo"></pre>

【讨论】:

  • 这是一个简单的解决方案。谢谢你。如果传递给库时缩进是未知的(而不是空格)怎么办?有时一个制表符在视觉上是 4 个空格,有时 8 个可能是 2 个。如果尝试用制表符替换空格,这也可能会干扰。我想如果没有制表符可能会引发错误,但我希望能解决未知空白问题。
  • 您可以组合一个制表符和多个空格。选项卡将跨越不同长度的字符串和请求填充的空格之间的间隙。它不会是完美的,但它会接近你所需要的。
  • 只要你知道字符串总是相同的(帮助输出通常是),就有多个小调整可以工作。让我希望有类似 html 的东西,但用于命令行输出。
猜你喜欢
  • 2021-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-02
  • 2016-09-17
相关资源
最近更新 更多