想知道从api对返回的对象运行多个javascript检查的最佳做法是什么。
例如,如果api返回此json。
var ob = {
"destination_addresses" : [ "15 Duke St, Cardiff, Cardiff CF10, UK" ],
"origin_addresses" : [ "2 College St, Swansea, Swansea SA1 5AE, UK" ],
"rows" : [
{
"elements" : [
{
"distance" : {
"text" : "67.9 km",
"value" : 67941
},
"duration" : {
"text" : "57 mins",
"value" : 3446
},
"status" : "OK"
}
]
}
],
"status" : "OK"
}
所以说我想检查持续时间是否只存在,但我不想做以下事情。
if(ob.rows){
if(ob.rows[0].elements){
if(ob.rows[0].elements[0].duration.text != undefined ){
console.log(ob.rows[0].elements[0].duration.text);
}
}
}
是否有更好的方法来检查持续时间并且文本存在?
答案 0 :(得分:2)
我在所有项目中使用此功能
function verifyObject( objString, objObject ) {
var objElements = objString.split( "." );
var tempObj = objObject;
for( var i = 0; i < objElements.length; i++ ) {
var objKey = objElements[ i ];
if( !tempObj[objKey] ) {
return false;
}
tempObj = tempObj[objKey];
}
return true;
}
你只需要这样称呼它
verifyObject( "rows.0.duration" , ob );
它将返回FALSE,因为“ob.rows [0] .duration”不存在
verifyObject( "rows.0.elements.0.duration" , ob )
将返回TRUE,因为“ob.rows [0] .elements [0] .duration”存在。 如果你想得到ob.rows [0] .elements [0] .distance.text
的值if( verifyObject( "ob.rows.0.elements.0.distance.text", ob ) ) {
var valueVar = ob.rows[0].elements[0].distance.text;
} else {
// VALUE DOESN'T EXIST
}