有一个对象varobj={a:{b:{c:3}}};vartext='a.b.c'如何根据text路径修改c的值为4,让结果为{a:{b:{c:4}}}小程序的setData方法就支持数据路径输入,我就是想知道如何实现这个功能,已知思路是递归lettext='a.b.c';this.setData({[text]:4})谢谢各位大佬帮忙
2 回答
慕盖茨4494581
TA贡献1850条经验 获得超11个赞
varobj={a:{b:{c:3}}}vartext='a.b.c'functionsetData(obj,config){letkeys=Object.keys(config)keys.forEach(key=>{cur=objletnames=key.split('.')letlast=names.length-1names.forEach((name,index)=>{if(!cur[name])cur[name]={}if(last===index){cur[name]=config[key]}else{cur=cur[name]}})})}setData(obj,{[text]:4,'e.f':6})//obj:{a:{b:{c:4}},e:{f:6}}}
料青山看我应如是
TA贡献1772条经验 获得超8个赞
functionsetObjfromText(obj,text,value){lettemp=objlettextgroup=text.split('.')letl=textgroup.lengthfor(leti=0;itemp[textgroup[i]]=typeof(temp[textgroup[i]])=='object'?temp[textgroup[i]]:{}temp=temp[textgroup[i]]}temp[textgroup[l-1]]=temp[textgroup[l-1]]|valuereturnobj}
添加回答
举报
0/150
提交
取消
