2017-07-10 47 views
2

我一直在JavaScript中使用三元運算符來根據用戶輸入修改對象的值。我有以下的代碼,它運行良好:JS具有多個條件的三元函數?

var inputOneAns = inputOne == "Yes" ? "517" : "518"; 

正如你所看到的,我分配數字字符串值inputOneAns用戶是否inputed「是」或「否」。但是,可能有用戶未選擇值的情況(因爲它不是必需的)。如果此輸入保留空白,我想將一個空字符串「」分配給inputOneAns。有沒有一種方法可以將三元運算符嵌入另一個三元運算符中?爲了澄清,這裏是我想用我的三元函數實現的功能,但是如果有其他語句,我還是要這樣做。

if (inputOne == "Yes"){ 
    var inputOneAns = "517" 
}else if (inputOne == "No"{ 
    var inputOneAns = "518" 
}else{ 
    var inputOneAns = "" 
} 

是否可以將多個表達式包含到三元函數中?有沒有更好的方法來完成我在找的東西?提前感謝提示。

+1

您可以嵌套三元運營商,但它通常不是很清楚 – MinusFour

+0

'let inputOneAns = inputOne ==='是'? '517':inputOne ==='否'? '518':'';'但是不。這很醜陋,'if' /'else'更具可讀性。如果你的同事知道你住在哪裏,那麼你就不願意冒險... –

+0

'var choices = {Yes:517,No:518}; var inputOneAns = inputOne的選擇?選擇[inputOne]:「」或「inputOneAns = choices [inputOne] ||」 「」' – Bergi

回答

3

switch語句可能是這種情況下的最佳選擇。

let inputOneAns; 
switch(inputOne) { 
    case "Yes": 
    inputOneAns = "517"; 
    break; 
    case "No": 
    inputOneNas = "518"; 
    break; 
    default: 
    inputOneNas = ""; 
} 

如果你可以做超過2個條件的三元操作,它們會變得難以置信的混亂。你可以把條件放在一起,但我不知道你爲什麼要這麼做 - 那將是令人難以置信的凌亂。

0

你可以將它們鏈接在一起,就像使用else if語句一樣,但它有時可能有點難以閱讀,所以我傾向於將它分割成多行。

var inputOneAns = inputOne == 'Yes' ? '517' : 
    inputOne == 'No' ? '518' : ''; 

然而,在這種情況下,我會建議一個switch陳述看到,因爲你比較的每一種情況下相同的值。

0

看起來像一個典型的用switch語句:

let inputOneAns = ''; 
switch(inputOne) { 
    case 'Yes': 
    inputOneAns = "517"; 
    break; 
    case 'No': 
    inputOneAns = "518"; 
    break; 
    default: 
    inputOneAns = ""; 
} 
  • 注意到你實際上並不需要默認情況下,但我覺得它使事情更易讀。
5

是的,你可以去野生築巢三元。我覺得這個版本是相當可讀:

var foo = (
    bar === 'a' ? 1 : // if 
    bar === 'b' ? 2 : // else if 
    bar === 'c' ? 3 : // else if 
    null // else 
); 

,但是這不是一個廣泛認同的意見,並在團隊工作時,你或許應該堅持if/elseswitch

+0

非常有幫助,我們可以使用這種語法編寫多行語句嗎? –

+0

是的,我不會過頭,但我喜歡它的原因是三元是_expression_而不是_statement_,所以您可以基於多個條件來分配「const」,而不必重新分配變量。 – Damon

+0

謝謝達蒙,這真的很有幫助 –

0
var r = inputOne == "" ? "" : ( 
inputOne == "Yes" ? "517" : "518");