如何在条件下检查几个局部变量

时间:2009-02-02 18:08:38

标签: javascript

好吧,我发现下面的代码非常重复且烦人。在不使用数组作为起点的情况下重构代码的任何其他方法(也就是说,为了避免在代码中使用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();
...

8 个答案:

答案 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() );