检查嵌套对象是否被声明并且具有没有这么多条件检查的值
Check if nested object is declared and has a value without so many conditional checks
我有一个从服务器获得的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
}
但是假设即使没有定义商店,它也不会获得 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 个条件,这些条件在性能方面(以及整体编码方面)似乎不是很好。我想知道是否有更简单的方法可以做到这一点?
var myJson = null;
try {
myJson = data.body.region.store.customer.name;
}
catch(err) {
//display error message
}
您可以尝试以下
function test(obj, prop) {
var parts = prop.split('.');
for(var i = 0, l = parts.length; i < l; i++) {
var part = parts[i];
if(obj !== null && typeof obj === "object" && part in obj) {
obj = obj[part];
}
else {
return false;
}
}
return true;
}
test(myJson, 'data.body.region.store.customer.name');
相关文章:
- 如何获取jQuery Confirm(jConfirm)值并使用该值检查条件
- 如何在angularjs中更改文本框类,同时键入和检查条件
- 每次调用函数后都要检查条件
- for循环在javascript中循环一次后不检查条件
- 网格视图中的Checbox检查条件无法按JavaScript的要求工作
- JavaScript - 是否有必要先检查条件
- 检查条件后如何在JavaScript中转到下一页
- 检查条件后转到给定的网址
- 如何使用ASCII值在JavaScript中检查条件
- 非常基本的 JavaScript,使用 || 检查条件(或)
- 表单验证在检查条件后未发出警报
- 继续检查条件是否成立
- 在加载时,如何以数组的形式检查条件中的多个值
- 如何在以编程方式在 JavaScript 中提交表单之前检查条件
- javascript中检查条件的奇怪行为
- 使& # 39;dom-if& # 39;根据另一个元素中的属性检查条件
- Angular ng-show不会连续检查条件
- Javascript在span标签的情况下没有正确检查条件
- 如何在Javascript函数中检查条件
- 检查条件后使用jQuery取消复选框