使用制表符或空格格式化文本
Posted
技术标签:
【中文标题】使用制表符或空格格式化文本【英文标题】:Formatting text with tabs or spaces 【发布时间】:2013-06-20 21:29:35 【问题描述】:我有这样的对象:
Name: "John"
Location: "Unknown"
Type: "Unknown"
Status: "Unknown"
Phone_number: "Unknown"
需要这样格式化(使用制表符或空格):
Name: John // three tabs
Location: Unknown // two tabs
Type: Unknown // three tabs
Status: Unknown // three tabs
Phone_number: Unknown // one tab
Java 和 Perl 都有这个 functionality in printf,但是如何在 javascript 中做到这一点?
【问题讨论】:
【参考方案1】:好的。找到here:
/**
* object.padding(number, string)
* Transform the string object to string of the actual width filling by the padding character (by default ' ')
* Negative value of width means left padding, and positive value means right one
*
* @param number Width of string
* @param string Padding chacracter (by default, ' ')
* @return string
* @access public
*/
String.prototype.padding = function(n, c)
var val = this.valueOf();
if ( Math.abs(n) <= val.length )
return val;
var m = Math.max((Math.abs(n) - this.length) || 0, 0);
var pad = Array(m + 1).join(String(c || ' ').charAt(0));
// var pad = String(c || ' ').charAt(0).repeat(Math.abs(n) - this.length);
return (n < 0) ? pad + val : val + pad;
// return (n < 0) ? val + pad : pad + val;
;
这不适用于制表符,但与我所描述的空格完全一样。
我的示例代码是:
$.each(myObj, function(myKey, myVal)
myOut += myKey.padding(20) + " = " + myVal + "\r\n";
);
输出将是:
Name = John
Location = Unknown
Type = Unknown
Status = Unknown
Phone_number = Unknown
【讨论】:
这非常有用,但它不适用于一行中的多个填充。【参考方案2】:编辑您可以使用“\t”添加更多选项卡。每个'\t'表示一个tab,所以在console.log中可以使用更多的console.log(prop + ":\t\t\t" + obj[prop]);
将您的对象传递给此函数(这适用于任何对象):
function printObject(obj)
for(var prop in obj)
if (obj.hasOwnProperty(prop))
console.log(prop + ":\t" + obj[prop]);
您还可以使用
获得非常相似的输出(但带有引号)JSON.stringify(obj, null, 2);
这基本上会以 jason 格式打印您的对象,并将使用最后一个参数(2)作为分隔符空格的数量。
【讨论】:
第一个函数只添加一个选项卡,如果键有长字或几个字,一个选项卡就不够了。即使在我的示例中,第一行也需要两个选项卡。 @ancap 你有没有尝试添加更多标签,比如:\t\t
,甚至:\t\t\t
?
我编辑了第一篇文章。正如您在第一行中看到的 - 三个选项卡,第二个 - 两个,第三和第四个 - 三个,第五个 - 一个。【参考方案3】:
String.prototype.padEnd(targetLength, padString)
方法可以完成这项工作,它记录在 here。
如果省略,padString
参数将设置为单空格字符串。
例子:
console.log(` $'Player'.padEnd(19) ` +
`$'MATCH'.padEnd(8) ` +
`$'SCORE'.padEnd(8) `
);
for (const player of this.players)
console.log(` - $player.name.padEnd(20) ` +
`$player.matches.length.toString().padEnd(8) ` +
`$player.score.toString().padEnd(8) `
);
结果:
Player MATCH SCORE
- Bradly 5 15
- Sam 4 9
- Dew 3 5
【讨论】:
更干净的例子jsbin.com 将 myString.padEnd(x) 与等宽字体结合使用是最好的解决方案,应该是公认的答案。以上是关于使用制表符或空格格式化文本的主要内容,如果未能解决你的问题,请参考以下文章