如何使用带有前导0的underscore.js生成一系列数字?

时间:2016-05-04 06:22:18

标签: javascript underscore.js

我一直在尝试为用户选择小时,分钟的下拉列表生成值。

为了获得可能的分钟值,我使用了这个:

_.range(1, 61)

这会生成一个类似

的数组
[1, 2, 3 ... 60] 

但我要求它的形式为

[01, 02, 03 ... 60] 

使用下划线是否有一种干净的方法?

3 个答案:

答案 0 :(得分:3)

在FF中,很快在其他浏览器中,使用padStart

_.range(1, 61) . map(num => String(num).padStart(2, '0'))

另一种方法是

_.range(1, 61) . map(num => ('0' + num).slice(-2));

这会在所有数字的开头添加零,但只取结果的最后两个字符。

一种功能性方法是编写一个高阶函数,该函数获取长度并返回一个函数,该函数将其输入填充到该长度:

function make_padder(len) {
  return str => ('0000000000000' + str).slice(-len);
}

现在你可以写

_.range(1,61) . map(make_padder(2))

答案 1 :(得分:1)

将它放在您的javascript文件的顶部...

Number.prototype.pad = function (count) {
   var num = this.valueOf();
   var ret = "";
   for (var i = 0; i < count - num.toString().length; i++) {
       ret += "0";
   }
   ret += num;
   return ret;
}

然后返回......

_.range(1, 61).map(function (num) { return num.pad(2) })

这将给出一个字符串数组,其前导0为长度为2

答案 2 :(得分:1)

只能使用字符串数组:

var 
  range = _.range(1, 61),
  i,
  arr = [];

for (i in range) {

  if (range[i] <= 9) {

    arr.push('0' + range[i]);
  }
  else {

    arr.push('' + range[i]);                      
  }
}

结果:

console.log(arr); // ["01", "02" ... "61"]
  

Object-Oriented JavaScript - Second Edition当数字以0开头时,它被视为八进制数。对于   例如,八进制0377是十进制255:

var n3 = 0377;

typeof n3; // "number"

n3; // 255
     

前面示例中的最后一行打印小数   表示八进制值。

parseInt('0377', 8); // 255
     

ECMAScript 5删除八进制文字值并避免混淆   使用parseInt()和未指定的基数。