2012-03-17 103 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