处理多个javascript检查的最佳方式

时间:2015-11-17 11:40:30

标签: javascript

想知道从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);
     }  
  }
}

是否有更好的方法来检查持续时间并且文本存在?

https://jsbin.com/turarurula/edit?js,console

1 个答案:

答案 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
}