国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > JavaScript > 正文

js中如何完美的解析數(shù)據(jù)

2019-11-19 14:08:39
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

自從有了前后端分離,一些后端小伙伴給出的數(shù)據(jù)結(jié)構(gòu)也來(lái)越混亂了。以為分離減輕了他們的負(fù)擔(dān)接口的質(zhì)量會(huì)非常高但是人的惰性卻體現(xiàn)的很“完美”。

由于js是若類型的語(yǔ)言,所以在使用數(shù)據(jù)的時(shí)候經(jīng)常會(huì)出現(xiàn)這個(gè)幾個(gè)錯(cuò)誤

TypeError: Cannot read property 'xxx' of undefinedTypeError: Cannot read property 'xxx' of nullTypeError: xxx.map is not a function

而這些異常很難發(fā)現(xiàn),及時(shí)發(fā)上線了都不一定能發(fā)現(xiàn)。因?yàn)檫@些問(wèn)題都是由于數(shù)據(jù)異常導(dǎo)致的。如果優(yōu)雅的解決或者說(shuō)避免這些問(wèn)題影響到用戶體驗(yàn)?zāi)兀?/p>

// 第一種做法肯定是這樣的if(a){  return a.name || '你沒(méi)名字'}// 這種做法處理簡(jiǎn)單的還能湊合用,但是如果你遇到這樣的呢 user.country.area.city.name,難道要這樣寫if(user && user.country && user.country.area && user.country.area.city){  return user.country.area.city.name || '你沒(méi)名字'}// 這是多么痛苦的一件事情 @后端兄弟// 第二種,感謝es6let {country={area:{city:{name:'你沒(méi)名字'}}}} = user;這個(gè)感覺(jué)也不是很好的解決方案// 第三種,利用reduce構(gòu)建一個(gè)解析函數(shù)function getValue(obj,key){  return key.split('.').reduce(function(o,k){    // o,當(dāng)前對(duì)象    // key,數(shù)組下一個(gè)元素    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]'))// 輸出結(jié)果undefinedundefined"12312"[1, 2, 3]2undefinedundefined[]

代碼測(cè)試:https://jsbin.com/zoberem/edit?js,console

最后關(guān)于前端異常上報(bào),這是一個(gè)很大的研究方向,市面上也有一些解決方案,但是真正推廣的我目前沒(méi)發(fā)現(xiàn)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 新建县| 梁河县| 常宁市| 靖州| 黄浦区| 峨眉山市| 昌宁县| 嘉兴市| 天气| 岐山县| 白水县| 新竹县| 奈曼旗| 会泽县| 东台市| 中方县| 文昌市| 仪陇县| 金阳县| 沾益县| 大田县| 新巴尔虎左旗| 澄江县| 禹州市| 平湖市| 杂多县| 汝阳县| 永仁县| 栾川县| 中江县| 安新县| 桃源县| 磴口县| 华安县| 婺源县| 长宁区| 辽宁省| 琼海市| 卢湾区| 龙山县| 永平县|