我的问题是:
我有一个终点,它将返回包含名为the_data_i_want
如果服务器检测到the_data_i_want
的值,则返回如下内容:
{
"sample": {
"title": "The Title",
"foo": {
"Bar": {
"Baz": {
"Qux": {
"the_data_i_want": "DATA PARTY!!!!"
}
}
}
}
}
}
如果服务器检测到the_data_i_want
为空,则它返回的JSON看起来像这样:
{
"sample": {
"title": "The Title"
}
}
我的问题是,因为链sample.foo.Bar.Baz.Qux.the_data_i_want
的任何部分我都是undefined
我最终通过json结构在每个步骤上执行这些疯狂的检查链,我看起来并首先看它是否未定义,如果不是,我会尝试下一个和下一个,直到我到达the_data_i_want
,这似乎是错误的。
问题:
有没有“正确”的方法来处理这个问题?甚至在筑巢中我会做什么才是任意深度的?我愿意使用jQuery。
谢谢你!答案 0 :(得分:1)
可能这可行..但可能有更好的方法......
在这种方法中,我拥有一个数组中的所有键并在循环中检查它们。
var obj = {
"sample": {
"title": "The Title",
"foo": {
"Bar": {
"Baz": {
"Qux": {
"the_data_i_want": "DATA PARTY!!!!"
}
}
}
}
}
};
var arr = ["foo", "Bar", "Baz", "Qux", "the_data_i_want"];
var arr1 = ["foo", "Bar", "Baz", "Qux", "the_data_i_want", "ding"];
checkKey('Object 1' , arr);
checkKey('Object 2 ' ,arr1);
function checkKey(str ,arr) {
if (obj && obj.sample) {
var k = obj.sample;
var i = 0;
for (var i = 0; i < arr.length; i++) {
if (k[arr[i]]) {
k = k[arr[i]];
if (i === arr.length - 1) {
alert('Data Found :: ' + k);
}
}
else {
alert('No such Key in :: ' + str );
break;
}
}
}
else {
alert('No such Key in :: ' + str );
}
}
<强> Check Fiddle 强>