【发布时间】:2016-01-16 03:57:00
【问题描述】:
我有一个从服务器获取的 JSON 对象。我从中获取值的键看起来像这样:
var myJson = data.body.region.store.customer.name;
我试图在这里获取名称键,但有时 JSON(来自我无法控制的服务)会有一些空字段,例如可能未定义名称,因此对象实际上看起来像这个:data.body.region.store.customer。有时也可能未定义客户、商店或区域(如果数据不存在,则服务不会为该值返回 null 或空字符串)。
所以如果我需要这个名字,我正在做的是:
if(data.body.region.store.customer.name){
//Do something with the name
}
但是说即使 store 没有定义,它也不会得到 name 的值(我希望它是未定义的,因为它不存在)并且程序崩溃。所以我现在要做的是在使用 AND 操作数获取值之前检查 JSON 的每个部分:
if(data && data.body && data.body.region && data.body.region.store && data.body.region.store.customer && data.body.region.store.customer.name){
//Do something with the name value then
}
这是可行的,因为它是按顺序检查的,所以它首先检查数据是否存在,如果存在,它接下来检查 data.body 是否存在,依此类推。每次都要检查很多条件,特别是因为我经常将服务用于许多其他事情,而且他们也需要自己的条件。因此,为了检查名称是否存在,我需要执行 6 个条件,这些条件在性能方面(和整体编码方面)当然看起来不太好。我想知道是否有更简单的方法可以做到这一点?
【问题讨论】:
-
我知道严格来说这不是一个骗局,但我链接的常见问题的解决方案将完全符合您的需求。
-
如果 lodash 没问题,你可以使用
_.get()var value = _.get(data, "body.region.store.customer.name", undefined /*defaultValue*/)
标签: javascript conditional-statements boolean-logic