Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.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 有没有办法把这个写得更短?_Javascript_Dry - Fatal编程技术网

Javascript 有没有办法把这个写得更短?

Javascript 有没有办法把这个写得更短?,javascript,dry,Javascript,Dry,我只是想知道我是否可以把这个循环写得更短 var m, d, y // date.length === format.length for (var i = 0, len = format.length; i < len; i++) { if (/m/.test(format[i])) m = date[i] if (/d/.test(format[i])) d = date[i] if (/y/.test(format[i])) y = date[i] } var m,d

我只是想知道我是否可以把这个循环写得更短

var m, d, y

// date.length === format.length
for (var i = 0, len = format.length; i < len; i++) {
  if (/m/.test(format[i])) m = date[i]
  if (/d/.test(format[i])) d = date[i]
  if (/y/.test(format[i])) y = date[i]
}
var m,d,y
//date.length==format.length
for(变量i=0,len=format.length;i
您的示例足够短,因此我不会对其进行更改,但为了示例起见,您可以使代码更具动态性,如下所示:

var obj = {};
var mdy = ['m', 'd', 'y']
var curLetter;
for (var i = 0, len = format.length; i < len; i++) {
    curLetter = mdy[i];
    if ((new Regexp(curLetter)).test(format[i])) obj[curLetter] = date[i];
}
var m = obj.m;
var d = obj.d;
var y = obj.y;
var obj={};
变量mdy=['m','d','y']
var curLetter;
for(变量i=0,len=format.length;i
最后三行您不需要,如果您只需要obj的属性。

语法保存? 保存一个var;把它放在头上

// date.length === format.length
for (var m, d, y, i = 0, len = format.length; i < len; i++) {
  if (/m/.test(format[i])) m = date[i]
  if (/d/.test(format[i])) d = date[i]
  if (/y/.test(format[i])) y = date[i]
}
//date.length==format.length
for(var m,d,y,i=0,len=format.length;i
或者可能是条件句:

for (var m, d, y, i = 0, len = format.length; i < len; i++) {
  (/m/.test(format[i])) ? m = date[i] 
  :(/d/.test(format[i])) ? d = date[i] 
  :(/y/.test(format[i])) y = date[i] 
  : continue;
}
for(变量m,d,y,i=0,len=format.length;i
但这改变了逻辑,我不确定这是不是想要的

也许您可以添加一个continue以加快执行速度,但同样不能确定逻辑

for (var m, d, y, i = 0, len = format.length; i < len; i++) {
  if (/m/.test(format[i])){
    m = date[i]
    //jump to next since this has been found
    continue;
  }
  if (/d/.test(format[i])){
    d = date[i]
    continue;
  }
  if (/y/.test(format[i])){
    y = date[i]
    continue;
  }
}
for(变量m,d,y,i=0,len=format.length;i
您可以使用
eval()
编写更通用的循环

var parts = ['d', 'm', 'y'],
    part,
    indexOfPart,
    d, m, y;

// Iterate over the variable you want to assign
for (int i = 0; i < parts.length; i++) {
    part = parts[i];

    // Find out where in the format is the current part of the date
    indexOfPart = format.indexOf(part);

    // If it is present, use eval to assign your variable
    if (indexOfPart !== -1) {
        eval(part + " = date[" + indexOfPart + "];");
    }
}
var parts=['d','m','y'],
部分
indexOfPart,
d、 m,y;
//迭代要分配的变量
对于(int i=0;i
如果你试图解释你想要实现的目标,那么给你一个解决方案会更容易。如果
格式[i]
中的字符串与
“m”
d
y
匹配,那么这段代码实际上可以做任何事情,它只需将
m
d
y
分别赋给
日期[i]/code>。