[原创作品] 对获取多层json值的封装
2016-01-14 16:18
751 查看
今天篇头不废话了,交流加群:164858883
在我们接收后端返回的json数据的时候,在数据缺失的时候,如果直接接收会导致致命错误的发生。可能有些同学会说通常都会有,不用判断直接获取也行。之前我也是这么想的,但从用了node + mongodb之后,发现数据库有些数据项没有的时候,前端报错了。后果就是页面完全失去了响应。比如我们要取一个这样的数据 :
在coffee中,dd = data?.aa?.bb?.cc?.dd这样可以解决,生成的js代码是这样的:
就是一层一层判断,在原生js如果这样写特别麻烦,所以我进行了一次封装,欢迎吐槽。
这篇居然被踢出了博客园首页,真是伤心,他们说介绍的篇幅太少了。好吧,后来我在使用的时候,发现我忘了去判断传入的第一个参数[obj,'param'......]的obj进行判断,如果obj为null或者为undefined的时候,下面的执行会出错。所以改进了下。额,我我发现我改了下代码块的字体大小,然后,就在代码块前加了个span标签。。。。。,这是博客园的bug。不影响阅读。
原创作品,转载请注明出处:http://zhutty.cnblogs.com 加q群:164858883
在我们接收后端返回的json数据的时候,在数据缺失的时候,如果直接接收会导致致命错误的发生。可能有些同学会说通常都会有,不用判断直接获取也行。之前我也是这么想的,但从用了node + mongodb之后,发现数据库有些数据项没有的时候,前端报错了。后果就是页面完全失去了响应。比如我们要取一个这样的数据 :
$.get(url, function(data){ var dd = data.aa.bb.cc.dd;//aa或bb或cc不存在时,此处会导致致命错误,导致一下代码无法执行 });
在coffee中,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; } } }
就是一层一层判断,在原生js如果这样写特别麻烦,所以我进行了一次封装,欢迎吐槽。
/**by Steven * 用于接收多层json数据,在没有属性的情况下不产生Cannot read property 'xxx' of null * @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; //确保传入的第一个值合法 if (!!temp) { for (i = 1; i < jsonArray.length; i++) { var key = jsonArray[i]; if (!!temp[key]) { temp = temp[key]; returnVal = temp; } else { returnVal = dftVal; //键值未找到,中断执行 break; } } }else{ returnVal = dftVal; } return returnVal; }
这篇居然被踢出了博客园首页,真是伤心,他们说介绍的篇幅太少了。好吧,后来我在使用的时候,发现我忘了去判断传入的第一个参数[obj,'param'......]的obj进行判断,如果obj为null或者为undefined的时候,下面的执行会出错。所以改进了下。额,我我发现我改了下代码块的字体大小,然后,就在代码块前加了个span标签。。。。。,这是博客园的bug。不影响阅读。
原创作品,转载请注明出处:http://zhutty.cnblogs.com 加q群:164858883
相关文章推荐
- 菜鸟学习中-javascript中获取时间
- js常用内置对象
- javaScript常用方法整合(项目中用到过的)
- JSON.stringify 的注意点
- oc js 交互
- js Array 删除指定元素
- JPA根据业务需求 过滤接口返回对象中的某些字段
- 论js里面的for循环
- JavaScript中类型判断
- JSON的格式
- 实现跨域请求jsonp方式
- JS 关于(function( window, undefined ) {})(window)写法的理解
- js实例代码
- Requesting JavaScript AST from selection
- js从身份证号中获取出生日期和性别
- js实现prototype扩展的方法(字符串,日期,数组扩展)
- javascript 基础API
- ExtJS5.0 菜鸟的第一天
- ajax传递json字符串写法
- Javascript中, event 的 target 与 currentTarget 的区别