js中如何完美的解析数据
程序员文章站
2022-07-10 17:42:19
自从有了前后端分离,一些后端小伙伴给出的数据结构也来越混乱了。以为分离减轻了他们的负担接口的质量会非常高但是人的惰性却体现的很“完美”。
由于js是若类型的语言,所以...
自从有了前后端分离,一些后端小伙伴给出的数据结构也来越混乱了。以为分离减轻了他们的负担接口的质量会非常高但是人的惰性却体现的很“完美”。
由于js是若类型的语言,所以在使用数据的时候经常会出现这个几个错误
typeerror: cannot read property 'xxx' of undefined typeerror: cannot read property 'xxx' of null typeerror: xxx.map is not a function
而这些异常很难发现,及时发上线了都不一定能发现。因为这些问题都是由于数据异常导致的。如果优雅的解决或者说避免这些问题影响到用户体验呢?
// 第一种做法肯定是这样的 if(a){ return a.name || '你没名字' } // 这种做法处理简单的还能凑合用,但是如果你遇到这样的呢 user.country.area.city.name,难道要这样写 if(user && user.country && user.country.area && user.country.area.city){ return user.country.area.city.name || '你没名字' } // 这是多么痛苦的一件事情 @后端兄弟 // 第二种,感谢es6 let {country={area:{city:{name:'你没名字'}}}} = user; 这个感觉也不是很好的解决方案 // 第三种,利用reduce构建一个解析函数 function getvalue(obj,key){ return key.split('.').reduce(function(o,k){ // o,当前对象 // key,数组下一个元素 if((typeof o === 'undefined' || o === null)){ return k.indexof('[array]') !== -1?[]:o }else{ return k.indexof('[array]') !== -1?(o[k.replace('[array]','')]||[]):o[k] } },obj) } let user1; let user2 = { } let user3 = { country:{ area:{ city:{ name:'12312' } } } } let user4 = { country:[ { city:{ name:'12312' } } ] } let user5 = { country:{ city:[1,2,3] } } console.log(getvalue(user1,'country.area.city.name')) console.log(getvalue(user2,'country.area.city.name')) console.log(getvalue(user3,'country.area.city.name')) console.log(getvalue(user5,'country.city[array]')) console.log(getvalue(user5,'country.city[array].1')) console.log(getvalue(user5,'country.city[array].10')) console.log(getvalue(user5,'country.city[array].1.name')) console.log(getvalue(user5,'country.city[array].persion[array]')) // 输出结果 undefined undefined "12312" [1, 2, 3] 2 undefined undefined []
代码测试:
最后关于前端异常上报,这是一个很大的研究方向,市面上也有一些解决方案,但是真正推广的我目前没发现。
推荐阅读
-
解析如何查看Oracle数据库中某张表的字段个数
-
详解如何在Node.js的httpServer中接收前端发送的arraybuffer数据
-
解析如何查看Oracle数据库中某张表的字段个数
-
js中如何去给一个对象通过后台数据动态添加键和键值
-
js中如何完美的解析数据
-
如何判断js中的数据类型:typeof、instanceof、 constructor、 prototype方法比较
-
在JQuery和Js中,如何让ajax执行完后再继续往下执行
-
Node.js 中如何收集和解析命令行参数
-
jmeter如何获取json数据中的键值对,解析json数据
-
探讨在JQuery和Js中,如何让ajax执行完后再继续往下执行_jquery