2011-10-13 83 views
22

我需要一些語法幫助與三元運營商,這將有助於我把正確的標記圖標上我的好map.I三個區0,1和2具有獨特的圖標0,1和2.多個三元運算

我用所以這個三元操作精細合作,只有兩個領域;

icon: (area == 1) ? icon1: icon0, 

現在我需要爲area2添加一個額外的第三個圖標(icon2)。

我已經試過各種方法,但似乎無法得到它的權利。

回答

36

的語法是:

icon: (area == 1) ? icon1 : (area == 2) ? icon2 : icon0, 

但是,這開始變得複雜。您最好創建一個功能來完成這項工作:

icon: getIcon(area), 

... 

function getIcon(area) { 
    if (area == 1) { 
    return icon1; 
    } else if (area == 2) { 
    return icon2; 
    } 

    return icon0; 
} 
+0

寫完之後,我意識到0總是映射到icon0,所以Pointy的回答是可取的。但是,如果您在這種情況下需要「全部」值,例如'icon0',則此方法仍然可行。 –

+0

謝謝賈斯汀,我決定最適合我需求的功能。我還發現,與三元運營商一起工作會更友好,而隨着時間的推移,三元運營商可能會變得更大。謝謝。 – Sam

+0

沒問題,很高興你覺得這有幫助! –

2
icon: (area == 0) ? icon0 : (area == 1) ? icon1 : icon2, 
17

如何:

icon: [ icon0, icon1, icon2 ][area], 
+1

+1 - 只要區域0始終映射到圖標0,這是最簡潔的方法...... –

+0

是的,這是一個很好的點 - 它依賴在「地區」表現良好,可以這麼說。 – Pointy

+0

我喜歡這種方法,但標記賈斯汀的答案,因爲它最適合的需求。非常感謝這個提示。 – Sam

7

對象文字如何?

icons = { 
    0: icon0, 
    1: icon1, 
    2: icon2 
} 

icon = icons[area]; 
4

很簡單的方式

var test1 = false 
var test2 = true 
var test = test1 ? test1 : test2 ? test2 : 'some default value' 
+0

這不是一個很好的測試,因爲'test1? test1:(test2?test2:'某個默認值')'和'(test1?test1:test2)? test2:'一些默認值'給出了相同的結果 – chharvey

+0

更好的測試是:var test = true; var result = test === true? '這是真的':test === false? '這是虛假':'它是空'。這樣當你分組最後兩個運算符時,'test === true? '這是真的':(test === false?'it is false':'it is null')',你會得到''它是''(正確),但是當你將前兩個運算符分組時, (test === true?'這是真的':test === false)? '它是虛假的':'它是空的',你會得到''它是錯誤的''(不正確)。這個測試更好,因爲它向你顯示了隱含的操作符分組。 – chharvey