qt 字符串填充
欢迎来到我们正在进行的系列文章中的第一篇文章,该系列文章讨论单个JavaScript函数-虽小却功能强大,可以很好地完成一件事情。 为了开始该系列,本文重点介绍了用前导字符填充值的函数。 此类函数对于格式化整数日期和时间特别有用。
函数的作用
pad
函数以字符串或数字开头,并用前导字符pad
输入,直到指定的字符串长度。 虽然该函数可以用任何其他值填充任何值,但最常见的用途可能是用前导零填充数字-例如,使24小时制中的小时,分钟和秒标准化。 pad
功能的代码如下所示。
function pad(input, length, padding)
{
while((input = input.toString()).length + (padding = padding.toString()).length < length)
{
padding += padding;
}
return padding.substr(0, length - input.length) + input;
}
从代码中可以看到,该函数带有三个参数。 第一个参数input
是要填充的值。 第二个参数length
是填充字符串的所需长度。 第三个参数padding
是填充值,通常只是一个字符。
使用功能
举一个用法的例子, Date.getHours()
函数根据本地时间返回一个数字,该数字表示指定日期中的小时。 要将小时归一化为两位数字字符串,您可以将其通过pad
传递,如下所示:
var hours = pad(new Date().getHours(), 2, 0);
将前面的示例更进一步,您可以创建一个完整的24小时时间字符串,如下所示:
var date = new Date(), time = [
pad(date.getHours(), 2, 0),
pad(date.getMinutes(), 2, 0),
pad(date.getSeconds(), 2, 0)
];
alert( time.join(':') );
功能键
首先,我们必须将输入值和填充值都转换为字符串,以便运算结果始终是串联的,即使两个值都是数字,也不是数字加法。 我们可以坚持认为输入必须是字符串,但这会使函数使用起来不那么方便。 例如,如果不自己转换为字符串,就无法将Date.getHours()
的输出传递给它。 编写这样的函数的最明显方法是将填充字符串简单地添加到输入字符串的开头,直到达到所需的长度为止,如下所示。
while(input.length < length)
{
input = padding + input;
}
return input;
这种方法的问题在于,只有当填充字符串是单个字符,或者输出长度减去输入长度才能被填充长度完全除掉时,该方法才能正常工作。 例如,如果我们传递了输入值"7"
,输出长度6
和填充字符串"0x"
,则结果将是"0x0x0x7"
。 这显然比指定的输出长度长。
为了解决这个问题,我们首先对填充进行了预编译-连接达到或超过输出长度所需的任意数量的实例。 然后,我们将其精确的子字符串添加到输入字符串中,以创建指定的确切输出长度:
while(input.length + padding.length < length)
{
padding += padding;
}
return padding.substr(0, length - input.length) + input;
使用与之前相同的示例,此改进代码的结果将为"0x0x07"
,因为实际上仅使用了最终填充实例的一个字符。
结论
在那里,它有一个简短而精巧的功能,可以执行简单但非常有用的任务。 我们创建了一个有助于格式化日期,时间,货币和rgb-hex值的函数。 请确保在接下来的几周内再检查一下,以了解更多简短而有趣的功能。
翻译自: https://www.sitepoint.com/a-utility-function-fo-padding-strings-and-numbers/
qt 字符串填充