【问题标题】:JS ES6 template literals and leading/suffix zeros to numberJS ES6 模板文字和数字的前导/后缀零
【发布时间】:2018-06-12 06:16:28
【问题描述】:

在 Python 中,可以在构建这样的字符串时将前导零附加到数字

print "%02d" % (1)
//>> "01"

是否可以对 ES6 模板文字做同样的事情?

(如果,是否也可以用空格代替零:“1”?)

【问题讨论】:

  • 可能使用标记模板文字,但实际上你只需要使用x.toString().padStart(" ", 2)。当然你可以编写自己的printf 函数(或使用任何现有的库)。

标签: javascript ecmascript-6 template-literals


【解决方案1】:

您可以使用字符串函数padStart,通过使用toString() 将数字转换为字符串,然后使用padStart 进行填充,其中第一个参数是长度,第二个参数是填充内容。

let n = 1;
n.toString().padStart(2, "0")
//=>"01"

【讨论】:

  • 它解决了我的需求。它只是不像 python 那样“优雅”/pythonic
【解决方案2】:

您可以尝试将最大宽度作为固定字符串添加到值中,然后将结果字符串切片为大小。

示例:假设您希望用句点填充数字,最大宽度为 6

console.log((`......${123}`).slice(-6));  // ...123

console.log((`......${12345}`).slice(-6)) // .12345

const v = 99;
console.log((`......${v}`).slice(-6))     // ....99

【讨论】:

  • 我的一个项目是一个命令行应用程序,它具有使用 nnnn-slug 格式创建新 Git 分支的功能,其中 nnnn 是左四位数字填充零的故事编号,后跟 sluggified故事标题的版本。让 branchName = '${('0000${storyNumber}').slice(-4)}-${slugify(storyTitle)}'; SO 注释处理器将反引号解释为内联代码围栏,因此我已更改为单引号。如果您复制此代码,请将单引号更改回反引号
【解决方案3】:

如果你的数字只能在 0 到 99 之间,那么试试这个:

for (let n = 0; n < 10; n++) {
  console.log(n.toString().padStart(2, "0"));
}

如果你想使用空格,那么试试这个:

for (let n = 0; n < 10; n++) {
  console.log(n.toString().padStart(2, " "));
}

如果你不想使用padStart,那么试试这个:

for (let n = 0; n < 100; n+=5) {
  console.log(('0'+n.toString()).slice(-2));
}

甚至这个:

for (let n = 0; n < 100; n+=5) {
  console.log(`0${n}`.slice(-2));
}

最后一个使用 ES6 文字,但仍使用 slice 仅获取最后 2 个字符。

要在最后两个上使用空格,只需将 0 更改为 ` 空格。

String.padStart 仅适用于较新的浏览器版本。所以你可能需要一个 polyfill。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/padStart

【讨论】:

  • 我非常怀疑 OP 是否希望从他们的号码中 删除 位,如果它超过 99。大多数时候人们只想将他们的号码补零一定位数。
  • 使用padStart 没有意义 slice
  • @Bergi 我清理了我的回复并准确地回答了 OP,因为他们询问了 ES6 字符串文字和使用空格以及 0。没有理由拒绝我的回答。
【解决方案4】:

执行此操作的紧凑方式,避免使用 toString()。

let n = 3;   
n = ("0"+n).substr(-2); // n === "03"

-2 是所需长度乘以 -1。将“0”更改为要填充的最大字符数。 对于 %03d:

let n = 3;   
n = ("00"+n).substr(-3); // n === "003"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-12
    • 1970-01-01
    相关资源
    最近更新 更多