Javascript 如何使用带前导0的下划线.js生成一系列数字?
我一直在尝试为用户选择小时、分钟的下拉列表生成值 为了获得分钟的可能值,我使用以下方法:Javascript 如何使用带前导0的下划线.js生成一系列数字?,javascript,underscore.js,Javascript,Underscore.js,我一直在尝试为用户选择小时、分钟的下拉列表生成值 为了获得分钟的可能值,我使用以下方法: _.range(1, 61) 这将生成一个类似 [1, 2, 3 ... 60] 但我要求它的形式 [01, 02, 03 ... 60] 有没有一种干净的方法可以使用下划线来获取此信息?将其放在javascript文件的顶部 Number.prototype.pad = function (count) { var num = this.valueOf(); var ret = ""
_.range(1, 61)
这将生成一个类似
[1, 2, 3 ... 60]
但我要求它的形式
[01, 02, 03 ... 60]
有没有一种干净的方法可以使用下划线来获取此信息?将其放在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;
}
这将给出一个长度为2的前导0的字符串数组,将其放在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;
}
这将产生一个长度为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]);
}
}
当一个数字以0开头时,它被认为是一个八进制数。对于
例如,八进制0377是十进制255:
var n3 = 0377;
typeof n3; // "number"
n3; // 255
上例中的最后一行打印小数
八进制值的表示
parseInt('0377', 8); // 255
ECMAScript 5删除八进制文字值并避免混淆
使用parseInt()
和未指定的基数
只能使用字符串数组:
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]);
}
}
当一个数字以0开头时,它被认为是一个八进制数。对于
例如,八进制0377是十进制255:
var n3 = 0377;
typeof n3; // "number"
n3; // 255
上例中的最后一行打印小数
八进制值的表示
parseInt('0377', 8); // 255
ECMAScript 5删除八进制文字值并避免混淆
使用parseInt()
和未指定的基数
在FF和其他浏览器中,请使用: 另一种方法是
_.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))
在FF和其他浏览器中,请使用: 另一种方法是
_.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))
数字没有前导零。@Marty我的错。我不知道为什么我在发布之前没有想到这一点。但是,是的,数字串适合我的用例。数字没有前导零。@Marty,我的错。我不知道为什么我在发布之前没有想到这一点。但是,是的,数字串对于我的用例来说很好。这是一种有趣的方式。今天我学到了一些新东西,谢谢!关于增强内置对象的一些词语。面向对象的JavaScript-第二版:通过原型增强内置对象是一种强大的技术,您可以使用它以任何喜欢的方式塑造JavaScript。但是,由于它的力量,在使用这种方法之前,你应该总是仔细考虑你的选择。原因是,一旦您了解了JavaScript,您就希望它以同样的方式工作,无论您使用的是哪一个第三方库或小部件。修改核心对象可能会混淆代码的用户和维护者,并产生意外错误。不客气,Abhinav I。我已经学会了不要干预javascript Object.prototype,因为出于某种原因,它与jQuery冲突。但是,我从扩展字符串、数组和数字原型中获得了一些非常好的优势。扩展数字原型的问题在于,由于解析问题,你不能说
1.pad()
,而必须说1.pad()
或1..pad()
。谢谢@AliMamedov。我知道人们会对这种方法感到困惑。我只是认为修改内置类型是不可能的。我想我会坚持使用torazaburo建议的更简单的方法。也谢谢池子。这是一种有趣的方式。今天我学到了一些新东西,谢谢!关于增强内置对象的一些词语。面向对象的JavaScript-第二版:通过原型增强内置对象是一种强大的技术,您可以使用它以任何喜欢的方式塑造JavaScript。但是,由于它的力量,在使用这种方法之前,你应该总是仔细考虑你的选择。原因是,一旦您了解了JavaScript,您就希望它以同样的方式工作,无论您使用的是哪一个第三方库或小部件。修改核心对象可能会混淆代码的用户和维护者,并产生意外错误。不客气,Abhinav I。我已经学会了不要干预javascript Object.prototype,因为出于某种原因,它与jQuery冲突。但是,我从扩展字符串、数组和数字原型中获得了一些非常好的优势。扩展数字原型的问题在于,由于解析问题,你不能说1.pad()
,而必须说1.pad()
或1..pad()
。谢谢@AliMamedov。我知道人们会对这种方法感到困惑。我只是认为修改内置类型是不可能的。我想我会坚持使用torazaburo建议的更简单的方法。也谢谢Ikechi。第二种方法对于我的用例来说已经足够好了,谢谢!将此标记为已接受的答案,因为我正在寻找最干净的方法。第二种方法对于我的用例来说已经足够好了,谢谢!因为我在寻找可能的最干净的方法,所以将此标记为可接受的答案。