Nat*_*Pet 420 javascript formatting
在JavaScript中,我需要填充.
例如,如果我有数字9,它将是"0009".如果我有多个说10,它将是"0010".请注意它将如何始终包含四位数.
一种方法是减去数字减去4得到我需要放置的0的数量.
有没有更明智的方式这样做?
Poi*_*nty 579
到目前为止,并没有太多的"浮油":
function pad(n, width, z) {
z = z || '0';
n = n + '';
return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
}
Run Code Online (Sandbox Code Playgroud)
使用数字初始化数组时,它会创建一个length设置为该值的数组,以便该数组显示包含许多undefined元素.虽然一些Array实例方法跳过没有值的数组元素,但是.join()没有,或者至少不完全; 它将它们视为它们的值是空字符串.因此,您可以获得每个数组元素之间的零字符(或任何"z")的副本; 这就是为什么那里有一个+ 1.
用法示例:
pad(10, 4); // 0010
pad(9, 4); // 0009
pad(123, 4); // 0123
pad(10, 4, '-'); // --10
Run Code Online (Sandbox Code Playgroud)
Rob*_*ton 236
function padToFour(number) {
if (number<=9999) { number = ("000"+number).slice(-4); }
return number;
}
Run Code Online (Sandbox Code Playgroud)
那样的东西?
Bonus难以理解但更光滑的单线ES6版本:
let padToFour = number => number <= 9999 ? `000${number}`.slice(-4) : number;
Run Code Online (Sandbox Code Playgroud)
ES6isms:
let是一个块范围变量(与var功能范围相对)=>是一个箭头函数,除了其他东西之外,还取代function了它的参数number =>)return您开头的单行,则可以省略大括号和return关键字,只需使用表达式即可diE*_*cho 148
尝试:
String.prototype.lpad = function(padString, length) {
var str = this;
while (str.length < length)
str = padString + str;
return str;
}
Run Code Online (Sandbox Code Playgroud)
现在测试:
var str = "5";
alert(str.lpad("0", 4)); //result "0005"
var str = "10"; // note this is string type
alert(str.lpad("0", 4)); //result "0010"
Run Code Online (Sandbox Code Playgroud)
在ECMAScript 8中,我们有新方法padStart, padEnd 其语法如下.
'string'.padStart(targetLength [,padString]):
所以现在我们可以使用了
const str = "5";
str.padStart(4, '0'); // '0005'
Run Code Online (Sandbox Code Playgroud)
Pet*_*r C 61
有趣,我最近不得不这样做.
function padDigits(number, digits) {
return Array(Math.max(digits - String(number).length + 1, 0)).join(0) + number;
}
Run Code Online (Sandbox Code Playgroud)
使用如下:
padDigits(9, 4); // "0009"
padDigits(10, 4); // "0010"
padDigits(15000, 4); // "15000"
Run Code Online (Sandbox Code Playgroud)
不漂亮,但有效.
ken*_*bec 23
你确实说过你有一个号码 -
String.prototype.padZero= function(len, c){
var s= '', c= c || '0', len= (len || 2)-this.length;
while(s.length<len) s+= c;
return s+this;
}
Number.prototype.padZero= function(len, c){
return String(this).padZero(len,c);
}
Run Code Online (Sandbox Code Playgroud)
Rob*_*rle 13
你可以这样做:
function pad ( num, size ) {
return ( Math.pow( 10, size ) + ~~num ).toString().substring( 1 );
}
Run Code Online (Sandbox Code Playgroud)
编辑:这只是一个函数的基本概念,但是为了增加对更大数字(以及无效输入)的支持,这可能会更好:
function pad ( num, size ) {
if (num.toString().length >= size) return num;
return ( Math.pow( 10, size ) + Math.floor(num) ).toString().substring( 1 );
}
Run Code Online (Sandbox Code Playgroud)
这有两件事:
Math.floor(num)代替~~num将支持更大的数字.| 归档时间: |
|
| 查看次数: |
453010 次 |
| 最近记录: |