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

How generate a range of numbers using underscore.js with leading 0s?

本文关键字:js 一系列 数字 underscore 何使用      更新时间:2023-09-26

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

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

_.range(1, 61)

这会生成类似的阵列

[1, 2, 3 ... 60] 

但我要求它是的形式

[01, 02, 03 ... 60] 

有没有一种使用下划线的干净方法?。

在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))

将其放在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) })

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

只有字符串数组才有可能:

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"]

面向对象JavaScript-第二版当一个数字以0开头时,它被认为是八进制数字。对于例如,八进制0377是十进制255:

var n3 = 0377;
typeof n3; // "number"
n3; // 255

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

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

ECMAScript 5删除八进制文字值并避免混淆具有CCD_ 2和未指定基数。