Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用带前导0的下划线.js生成一系列数字?_Javascript_Underscore.js - Fatal编程技术网

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。第二种方法对于我的用例来说已经足够好了,谢谢!将此标记为已接受的答案,因为我正在寻找最干净的方法。第二种方法对于我的用例来说已经足够好了,谢谢!因为我在寻找可能的最干净的方法,所以将此标记为可接受的答案。