我收到一个深层嵌套的对象。我不知道会出现哪些属性。如果我想获得图像,我不能这样做
data.opposite.info.logo.images.s.resized_urls.s,
想象一下,这来自一个用户可以将徽标留空的系统,然后我的代码就会中断。我需要检查这样的属性是否存在?
if(data.opposite){
if(data.opposite.info)
if(data.opposite.info.images)
//...etc
}
答案 0 :(得分:1)
使用javascript' try { ... } catch(e) { ... }
阻止。
try {
url = data.opposite.info.logo.images.s.resized_urls.s; }
catch(e) {
url = ''
}
同样loadash.js有一个get方法,可以帮助您解决这个问题
var url = _.get(data, 'opposite.info.logo.images.s.resized_urls.s', '');
如果路径存在,这将深入到对象并返回'。如果不存在,则返回最后一个参数''在这种情况下。
答案 1 :(得分:0)
我正在尝试通过扫描对象获取价值:jsfiddle
function getObjByProperty(obj, propertyName) {
if (obj instanceof Object) {
if (obj.hasOwnProperty(propertyName)) {
return obj[propertyName];
}
for (var val in obj) {
if (obj.hasOwnProperty(val)) {
var result = getObjByProperty(obj[val], propertyName);
if (result != null) {
return result;
}
}
}
} else {
return null;
}
}
var images = getObjByProperty(data, 'images');
if (images) {
console.log(images);
}
答案 2 :(得分:-2)
您可以编写自己的函数进行测试,但可能是最简单,最干净的方法,就是使用try..catch
try {
// do ... with data.opposite.info.logo.images.s.resized_urls.s
} catch(e) {
// do ... if it doesn't exist
}