2017-08-02 19 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

相关问题