2012-03-17 32 views
2

我有3个变量,并不总是设置。 o1o2o3最简单的方法选择首选变量值

我想按照以下步骤创建一个新的变量:

如果没有设置:o4 = null

如果o1设置,o4 = o1,都把对方是什么。

时未设置 o1

o2设置:o4 = o2

所以o4 = o3时未设置1和2只被设定。

==

我现在用的是长开关,但我敢打赌,这是可以做到更好。

的JavaScript/jQuery的

var tmpl = ''; 

    if(data.o3 != null) 
     tmpl = data.o3; 

    if(data.o2 != null) 
     tmpl = data.o2; 

    if(data.o1 != null) 
     tmpl = data.o1; 

回答

2

尝试var o4 = o1 || o2 || o3

编辑:根据评论,这只适用于可能设置的值不是虚假的。除非你确定,否则最好避免使用这种方法。

+2

这并不if' o1','o2'或工作'o3'可以像' “” 假,0,NaN,则null'等合法falsey值... – jfriend00 2012-03-17 23:02:39

+1

这个假设变量不能像'0'这样的伪造值。而且,如果“o3”完全没有设置,那么'o4'将以'undefined'而不是'null'结尾。 – Henry 2012-03-17 23:02:45

+0

是我的第一个想法,但它不会工作为0例如和OP说,条件是'设置'不'是truthy' |编辑:哇我很慢:) – Andy 2012-03-17 23:03:08

2

最简单的方法(和支持的变量的任意数量的方法),将是把你的o1, o2, o3变量放入数组:

getFirstDefined(array) { 
    for var (i = 0; i < array.length; i++) { 
     if (typeof array[i] != "undefined") { 
      return(array[i]); 
     } 
    } 
    return(null); 
} 
+0

这似乎是迄今为止唯一正确的解决方案 – Andy 2012-03-17 23:10:17

+0

+1这里是一个很好的解决方案。在我的情况下,变量是否设置,所以亚当的解决方案将会很好。 – 2012-03-17 23:17:06

3

这应做到:

o4 = o1 || o2 || o3 || null; 

它将检查每个变量以查看它是否是虚假的。如果一个值对于任何将使用该值的变量都是真实的。如果没有人真的将o4设置为空。如果你不关心o4具有什么样的falsy值,那么最后的null值是可选的。

编辑:将“set”切换为“truthy”。

+0

+1好的答案,这个作品对我来说。 – 2012-03-17 23:15:45

1

demo

function set(o1, o2, o3) { 
    var o4 = o1 || o2 || o3 || null; 
    console.log(o4); //check o4 
} 

set()     //o4 = null 
set('foo1');   //o4 = foo1 
set(null,'foo2');  //o4 = foo2 
set(null,null,'foo3'); //o4 = foo3