好吧,我发现下面的代码非常重复且烦人。在不使用数组作为起点的情况下重构代码的任何其他方法(也就是说,为了避免在代码中使用array [x],array [y],array [z]作为从数组开始的结果,因为x,y,z完全不相关,为了便于阅读,将它们分组是没有意义的)
var x = "";
var y = "";
var z = "";
...
...variables get set
if(x != undefined && x != "")
doSomethingHere();
if(y != undefined && y != "")
doSomethingThere();
if(z != undefined && z != "")
doSomethingElse();
...
答案 0 :(得分:7)
至少,您可以将验证规则分解为自己的功能:
function IsValid(x)
{
return (x != undefined && x != "");
}
var x = "";
var y = "";
var z = "";
//...
//...variables get set
if(IsValid(x)) doSomething();
if(IsValid(y)) doSomething();
if(IsValid(z)) doSomething();
答案 1 :(得分:7)
除了joel所说的,您还可以执行以下操作:
function doOnValid(x, func){
if(x != undefined && x != "") func();
}
然后你可以这样做:
doOnValid(x, doSomething);
doOnValid(y, doSomethingElse);
doOnvalid(z, function() { /*Yay lambda function*/ });
答案 2 :(得分:2)
如果你试图避免重复,可以是垂直(var x; \ r \ n; var y; \ r \ n ...)或水平(if(x || y || z ||)。 ..),一个很好的整理方法是将变量作为属性收集到对象中:
var vars = {
x: 42,
y: "",
z: undefined
};
for (var v in vars) {
var value = vars[v];
if (value != undefined && value != "") {
doSomething();
}
}
最重要的是,如果每个变量要采取的操作不同,您还可以定义“操作”结构:
var actions = {
x: doSomething,
y: doSomethingElse,
z: doSomething
};
for (var v in vars) {
var value = vars[v];
if (value != undefined && value != "") {
actions[v]();
}
}
答案 3 :(得分:1)
是否有理由将x,y和z初始化为“”?
如果你这样做
var x;
..... maybe set x .....
if (x)
doSomething()
你节省了很多模糊。您可以对y和z执行相同操作;)x的初始值是未定义的,您可以使用if(x)进行检查,这意味着与if(x!= undefined)相同
答案 4 :(得分:1)
首先,因为未定义和空字符串(“”)在javascript中评估为“false”,您可以将条件更改为:
if (x)
doSomething();
if (y)
doSomething();
if (z)
doSomething();
如果要做的事总是一样的话,你当然可以做到
if (x || Y || z)
doSomething();
答案 5 :(得分:0)
我猜测原来应该使用y!= undefined和doSomething()在所有情况下都是相同的功能:
if((x != undefined && x != "") ||
(y != undefined && y != "") ||
(z != undefined && z != ""))
doSomething();
答案 6 :(得分:0)
因此,为了跟进krosenvold的回答,我认为你想要的是
var x;
var y;
var z;
// do stuff
if (x||y||z)
doSomething();
哪个更整洁
答案 7 :(得分:0)
这就像我能做到的那样简洁,假设你想为每个条件做一个独特的动作。
(x && doX());
(y && doY());
(z && doZ());
这是有效的,因为您的特定变量测试只是减少到变量的值。当然,您也可以编写自定义条件函数:
function is_valid(x){
// return true or false
}
( is_valid(x) && doX() );
( is_valid(y) && doY() );
( is_valid(z) && doZ() );