在我们接收后端返回的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
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。