后端返回一组数据,其中有一项是这样的:"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里
2 回答
慕婉清6462132
TA贡献1804条经验 获得超2个赞
要简单点的话,就这样: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);
拉莫斯之舞
TA贡献1820条经验 获得超10个赞
谢邀,@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]};});
添加回答
举报
0/150
提交
取消