在JavaScript中用前导零填充数字[重复]

2020/09/25 13:41 · javascript ·  · 0评论

在JavaScript中,我需要填充。

例如,如果我有数字9,它将是“ 0009”。如果我有10个数字,它将是“ 0010”。请注意,它将始终包含四个数字。

一种方法是减去数字减4以获得我需要输入的0。

有一种巧妙的方法吗?

到目前为止,并没有很多“滑溜溜”的事情:

function pad(n, width, z) {
  z = z || '0';
  n = n + '';
  return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
}

当您用数字初始化数组时,它将创建一个数组length并将其值设置为该数组,以便该数组似乎包含这么多的undefined元素。尽管某些Array实例方法会跳过没有值的数组元素,.join()但没有,或者至少没有完全跳过会将其视为空字符串。因此,您将在每个数组元素之间获得零字符(或任何“ z”)的副本;这就是为什么里面有一个+ 1

用法示例:

pad(10, 4);      // 0010
pad(9, 4);       // 0009
pad(123, 4);     // 0123

pad(10, 4, '-'); // --10
function padToFour(number) {
  if (number<=9999) { number = ("000"+number).slice(-4); }
  return number;
}

这样的东西?

奖金令人费解但流畅的单行ES6版本:

let padToFour = number => number <= 9999 ? `000${number}`.slice(-4) : number;

ES6isms:

  • let是块范围的变量(与var的功能范围相反
  • =>一个箭头函数,除其他事项外内容替换function,并通过它的参数前缀
  • 如果箭头函数使用单个参数,则可以省略括号(因此number =>
  • 如果箭头函数的主体以单行开头,则return可以省略花括号和return关键字,而只需使用表达式
  • 为了使函数体降至单行,我作弊并使用了三元表达式

尝试:

String.prototype.lpad = function(padString, length) {
    var str = this;
    while (str.length < length)
        str = padString + str;
    return str;
}

现在测试:

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"

DEMO


ECMAScript 8中,我们有一个新方法padStartpadEnd 它具有以下语法。

"string".padStart(targetLength [,padString]):

所以现在我们可以使用

const str = "5";
str.padStart(4, "0"); // "0005"

有趣的是,我最近不得不这样做。

function padDigits(number, digits) {
    return Array(Math.max(digits - String(number).length + 1, 0)).join(0) + number;
}

使用方式如下:

padDigits(9, 4);  // "0009"
padDigits(10, 4); // "0010"
padDigits(15000, 4); // "15000"

不漂亮,但有效。

你确实说过你有一个号码

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);
}

您可以执行以下操作:

function pad ( num, size ) {
  return ( Math.pow( 10, size ) + ~~num ).toString().substring( 1 );
}

编辑:这只是一个函数的基本思想,但是要添加对更大数字的支持(以及无效输入),可能会更好:

function pad ( num, size ) {
  if (num.toString().length >= size) return num;
  return ( Math.pow( 10, size ) + Math.floor(num) ).toString().substring( 1 );
}

这有两件事:

  1. 如果该数字大于指定的大小,它将仅返回该数字。
  2. 使用Math.floor(num)代替~~num将支持更大的数字。

这并不是真正的“灵巧”,但是对每个填充执行整数运算要比对字符串进行串联运算要快0

function ZeroPadNumber ( nValue )
{
    if ( nValue < 10 )
    {
        return ( '000' + nValue.toString () );
    }
    else if ( nValue < 100 )
    {
        return ( '00' + nValue.toString () );
    }
    else if ( nValue < 1000 )
    {
        return ( '0' + nValue.toString () );
    }
    else
    {
        return ( nValue );
    }
}

此功能也已硬编码为您的特定需求(4位填充),因此不是通用的。

为了娱乐,不要使用循环来创建额外的零:

function zeroPad(n,length){
  var s=n+"",needed=length-s.length;
  if (needed>0) s=(Math.pow(10,needed)+"").slice(1)+s;
  return s;
}

既然您提到过,它的长度总是4,所以我不会做任何错误检查来使它光滑。;)

function pad(input) {
    var BASE = "0000";
    return input ? BASE.substr(0, 4 - Math.ceil(input / 10)) + input : BASE;
}

想法:只需用提供的数字替换'0000'...问题是,如果input为0,我需要对其进行硬编码以返回'0000'。大声笑。

这应该足够光滑。

JSFiddler:http : //jsfiddle.net/Up5Cr/

本文地址:http://javascript.askforanswer.com/zaijavascriptzhongyongqiandaolingtianchongshuzizhongfu.html
文章标签: ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!