我一直在尝试为用户选择小时,分钟的下拉列表生成值。
为了获得可能的分钟值,我使用了这个:
_.range(1, 61)
这会生成一个类似
的数组[1, 2, 3 ... 60]
但我要求它的形式为
[01, 02, 03 ... 60]
使用下划线是否有一种干净的方法?
答案 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()
和未指定的基数。