遍历JSON数据,数据格式特殊怎么处理?

后端返回一组数据,其中有一项是这样的:
"oneWeekAll":"{weekStart:2017-11-13,weekEnd:2017-11-19};{weekStart:2017-11-06,weekEnd:2017-11-12};{weekStart:2017-10-30,weekEnd:2017-11-05};"
我要如何转成正常的数组以方便循环遍历呢?这里面每个大括号都是用分号间隔的,并且一整串在一个双引号内,搞得我有点乱套。求助大神,谢谢
附上后台返回的全部数据:
AuditRetCode:"1"
AuditRetVal:"success"
RetCode:"1"
RetVal:"1"
oneWeekAll:"{weekStart:2017-11-13,weekEnd:2017-11-19};{weekStart:2017-11-06,weekEnd:2017-11-12};{weekStart:2017-10-30,weekEnd:2017-11-05};"
我要的东西在oneWeekAll里
Cats萌萌
浏览 337回答 2
2回答

慕婉清6462132

要简单点的话,就这样:constoneWeekAll="{weekStart:2017-11-13,weekEnd:2017-11-19};{weekStart:2017-11-06,weekEnd:2017-11-12};{weekStart:2017-10-30,weekEnd:2017-11-05};";constresult=oneWeekAll.split(';').filter(item=>item).map(item=>{conststr=item.replace(/\{|\}/g,'')constarr=str.split(/\:|\,/)return{weekStart:arr[1],weekEnd:arr[3]}});console.log(result);

拉莫斯之舞

谢邀,@Ash_Shen的回答满分,我稍稍改了一下(没啥实际意义,也不知道性能如何)constall="{weekStart:2017-11-13,weekEnd:2017-11-19};{weekStart:2017-11-06,weekEnd:2017-11-12};{weekStart:2017-10-30,weekEnd:2017-11-05};";constlist=all.split(";").filter(t=>t).map(t=>t.split(/[{},:]/)).map(parts=>({[parts[1]]:parts[2],[parts[3]]:parts[4]}));然后还写了一个比较搞笑的版本(性能肯定不怎么样)constall="{weekStart:2017-11-13,weekEnd:2017-11-19};{weekStart:2017-11-06,weekEnd:2017-11-12};{weekStart:2017-10-30,weekEnd:2017-11-05};";constjson=all.replace(/;?$/,"").replace(/,/g,"\",\"").replace(/:/g,"\":\"").replace(/;/g,",").replace(/\{/g,"{\"").replace(/\}/g,"\"}");constlist=JSON.parse(`[${json}]`);补充一下,上面最后一种肯定是很慢的,不过在jsPerf上测试第1种比@Ash_Shen的答案慢35%左右,尝试把两个map合并成一个map,作用不大,但是改了一个对象的key,速度一下子就起来了,居然提升了150%(也就是2.5倍)constlist=all.split(";").filter(t=>t).map(t=>{constparts=t.split(/[{},:]/);return{weekStart:parts[2],weekEnd:parts[4]};});
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript