在JavaScript中推荐的零填充方法是什么?我想我可以构建一个自定义函数来填充零到类型转换的值,但我想知道是否有更直接的方法来做到这一点?
注意:这里的“zeroffilled”指的是数据库意义上的单词(其中数字5的6位零填充表示形式将是“000005”)。
在JavaScript中推荐的零填充方法是什么?我想我可以构建一个自定义函数来填充零到类型转换的值,但我想知道是否有更直接的方法来做到这一点?
注意:这里的“zeroffilled”指的是数据库意义上的单词(其中数字5的6位零填充表示形式将是“000005”)。
当前回答
如果npm在你的环境中可用,可以使用一些现成的包:www.npmjs.com/browse/keyword/zeropad。
我喜欢零填充。
安装
$ npm install zero-fill
使用
var zeroFill = require('zero-fill')
zeroFill(4, 1) // '0001'
zeroFill(4, 1, '#') // '###1' custom padding
zeroFill(4)(1) // '0001' partials
其他回答
不要白费力气;使用下划线字符串:
js小提琴
var numToPad = '5';
alert(_.str.pad(numToPad, 6, '0')); // Yields: '000005'
这是我用来填充7个字符的数字。
("0000000" + number).slice(-7)
这种方法可能对大多数人来说已经足够了。
编辑:如果你想让它更通用,你可以这样做:
("0".repeat(padding) + number).slice(-padding)
编辑2:注意,自ES2017以来,你可以使用String.prototype.padStart:
number.toString().padStart(padding, "0")
可变长度填充功能:
function addPaddingZeroes(value, nLength)
{
var sValue = value + ''; // Converts to string
if(sValue.length >= nLength)
return sValue;
else
{
for(var nZero = 0; nZero < nLength; nZero++)
sValue = "0" + sValue;
return (sValue).substring(nLength - sValue.length, nLength);
}
}
仅供参考,更清晰,更可读的语法恕我直言
"use strict";
String.prototype.pad = function( len, c, left ) {
var s = '',
c = ( c || ' ' ),
len = Math.max( len, 0 ) - this.length,
left = ( left || false );
while( s.length < len ) { s += c };
return ( left ? ( s + this ) : ( this + s ) );
}
Number.prototype.pad = function( len, c, left ) {
return String( this ).pad( len, c, left );
}
Number.prototype.lZpad = function( len ) {
return this.pad( len, '0', true );
}
这也导致结果的视觉和可读性问题比其他一些解决方案更少,这些解决方案强制'0'作为字符;回答我的问题,我该怎么做,如果我想垫其他字符,或在其他方向(右填充),同时保持容易打字,并清楚地阅读。我敢肯定,这也是DRY的最佳示例,实际的前导零填充函数体的代码最少(因为其他相关函数在很大程度上与这个问题无关)。
该代码可通过github用户的gist进行评论(代码的原始来源) https://gist.github.com/Lewiscowles1986/86ed44f428a376eaa67f
在控制台和脚本测试中注意,数值文字似乎需要括号或变量才能调用方法,因此2.pad(…)将导致错误,而(2).pad(0,'#')不会。这似乎对所有数字都是一样的
也许我太天真了,但我认为这在一行简单而有效的代码中就可以实现(对于正数):
padded = (value + Math.pow(10, total_length) + "").slice(1)
只要你保持你的长度根据你的值集(在任何零填充),这应该是可行的。
步骤如下:
10的幂与正确的0数相加[69+1000 = 1069] 转换为字符串+"" [1069 => "1069"] 对第一个1进行切片,这是第一个乘法的结果["1069" => "069"]
对于自然列表(文件,dirs…)是非常有用的。