假设我有一个带有混合对象和数组的复杂json对象x。 是否有一种简单或通用的方法来检查此对象中的变量是否为null或未定义,例如:
if(x.a.b[0].c.d[2].e!=null) ....
而不是正常检查所有父字段
if(x.a!=null
&& x.a.b!=null
&& x.a.b[0]!=null
&& x.a.b[0].c!=null
&& x.a.b[0].c.d!=null
&& x.a.b[0].c.d[2]!=null
&& x.a.b[0].c.d[2].e!=null) ....
答案 0 :(得分:6)
try {
if(x.a.b[0].c.d[2].e!=null)
//....
} catch (e) {
// What you want
}
<强> Live DEMO 强>
答案 1 :(得分:3)
这是一个不需要异常处理的变体..它会更快吗?我对此表示怀疑。会更干净吗?嗯,这取决于个人偏好..当然这只是一个小的示范原型,我相信已经存在更好的“JSON查询”库。
// returns the parent object for the given property
// or undefined if there is no such object
function resolveParent (obj, path) {
var parts = path.split(/[.]/g);
var parent;
for (var i = 0; i < parts.length && obj; i++) {
var p = parts[i];
if (p in obj) {
parent = obj;
obj = obj[p];
} else {
return undefined;
}
}
return parent;
}
// omit initial parent/object in path, but include property
// and changing from [] to .
var o = resolveParent(x, "a.b.0.c.d.2.e");
if (o) {
// note duplication of property as above method finds the
// parent, should it exist, so still access the property
// as normal
alert(o.e);
}