在我们接收后端返回的json数据的时候json 数组,在数据缺失的时候,如果直接接收会导致致命错误的发生。可能有些同学会说通常都会有,不用判断直接获取也行。之前我也是这么想的,但从用了node + 之后,发现数据库有些数据项没有的时候,前端报错了。后果就是页面完全失去了响应。比如我们要取一个这样的数据 :

$.get(url, function(data){
var dd = data.aa.bb.cc.dd;//aa或bb或cc不存在时,此处会导致致命错误,导致一下代码无法执行
});

在中,dd = data?.aa?.bb?.cc?.dd这样可以解决,生成的js代码是这样的:

var _ref, _ref1;
if (typeof aa !== "undefined" && aa !== null) {
  if ((_ref = aa.bb) != null) {
    if ((_ref1 = _ref.cc) != null) {
      _ref1.dd;
    }
  }
}

就是一层一层判断json 数组,在原生js如果这样写特别麻烦,所以我进行了一次封装,欢迎吐槽。

        /**
         * 用于接收多层json数据
         * @param jsonArray 传入的数据数组[目标对象,'第一层属性名','第二层属性名'....]
         * @param dftVal 当没有找到时返回的默认值
         */
        getJsonAttr: function (jsonArray, dftVal) {
 //非数组,直接返回,只有数据本身返回,保证数组最少有2个元素
 if(dftVal == null){
 dftVal = ''
 }
 if(jsonArray == null){
 return dftVal
 }
 if(jsonArray.constructor != Array){
 return jsonArray
 }
 if (jsonArray.length == 1) {
 return jsonArray[0];
 }
 var temp = jsonArray[0];
 var returnVal = null;
 for(i=1;i<jsonArray.length;i++){
 var key = jsonArray[i];
 if(!!temp[key]){
 temp = temp[key];
 returnVal = temp;
 }else{
 returnVal = dftVal;
 //键值未找到,中断执行
 break;
 }
 }
 return returnVal;
        }

代码写的很清楚,就不多介绍了。


限时特惠:
本站持续每日更新海量各大内部创业课程,一年会员仅需要98元,全站资源免费下载
点击查看详情

站长微信:Jiucxh

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注