2017-08-02 20 views
1

我在處理一些事情時遇到了一些麻煩。我需要使用三元運算符來返回值或假,但它從包含其他嵌套對象的對象獲取它所需的數據,並且我不能確定這些嵌套對象中的任何一個是否存在。三元需要兩件事情是真的

數據結構如下:

data = { 
    "foo":{ 
     "bar": true, 
     "tar": true, 
     "rar": false 
    }, 
    "goo":{ 
     "har": true, 
     "par": true, 
     "mar": false 
    }, 
} 

三元運營商需要基本上做類似如下:

var something = data.foo.bar ? data.foo.bar : false 

但它可能是data.foo不存在,也有可能data.foo.bar不存在。

如何檢查任何一個不存在的元素,如果其中一個不存在並返回false,並返回實際值(如果存在)?

我不認爲這是一個它被標記爲重複的,因爲我特別需要它是一個三元操作符的副本。如果不適合我的目的。

+2

您的代碼在語法上無效。你不能以這種方式使用數字作爲屬性名稱;你必須使用'[]'運算符而不是'.'。 – Pointy

+0

是的,我意識到這一點,我只是使用虛擬數據。我會把它改正。謝謝! – Steve

+0

此外,三元運算符雖然高效,但可能會導致代碼難以閱讀,尤其是當條件複雜時,讀者可能會說,三元運算符只是一個if語句,所以檢查它是否也是「undefined」 。 – Leeish

回答

1

可以使用in操作:

var x = (1234 in data && data[1234] && 5678 in data[1234]) ? 
    data[1234][5678] : 
    false; 

結構一樣,是容易出錯,這可能是從問題的存在明顯。

+0

嘿,謝謝你,這工作。不幸的是,我必須使用三元(我使用它作爲選擇基於計算屬性的Vue.js中的CSS類的選項,如果這意味着什麼給你,並且據我所知只有這樣才能完成正在使用一個三元組)。 – Steve

+0

而事實證明,這使得我的代碼真的很慢:/啊,謝謝你的答案! – Steve

相關問題