猿问

已知一个对象,还有一个数据路径的字符串,如何根据数据路径找到值

有一个对象


var obj = {

  a: {

    b: {

      c: 3

    }

  }

};

var text = 'a.b.c'

如何根据 text 路径修改 c 的值为 4,让结果为


{

  a: {

    b: {

      c: 4

    }

  }

}

小程序的 setData 方法就支持数据路径输入,我就是想知道如何实现这个功能,已知思路是递归


let text = 'a.b.c';

this.setData({

    [text]: 4

})

谢谢各位大佬帮忙


慕森王
浏览 491回答 3
3回答

ibeautiful

var obj = {  a: {    b: {      c: 3    }  }}var text = 'a.b.c'function setData(obj, config) {  let keys = Object.keys(config)  keys.forEach(key => {    cur = obj    let names = key.split('.')    let last = names.length - 1    names.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}}}

潇潇雨雨

function setObjfromText(obj,text,value){&nbsp; &nbsp; let temp=obj&nbsp; &nbsp; let textgroup = text.split('.')&nbsp; &nbsp; let l = textgroup.length&nbsp; &nbsp; for(let i=0;i<l-1;i++){&nbsp; &nbsp; &nbsp; temp[textgroup[i]] = typeof(temp[textgroup[i]])=='object'?temp[textgroup[i]]:{}&nbsp; &nbsp; &nbsp; temp = temp[textgroup[i]]&nbsp; &nbsp; }&nbsp; &nbsp; temp[textgroup[l-1]] = temp[textgroup[l-1]] | value&nbsp; &nbsp; return obj}

胡子哥哥

function setObjText(o,t,v){ //因为是设置,所以我理解已经有这个结构否则需要保证路径上各级都是对象let tmp=o;let t2k=t.split('.');for(let i=0;i<t2k.length;i++){&nbsp; &nbsp; tmp[t2k[i]]=typeof(tmp[t2k[i]])=='object'?tmp[t2k[i]]:{} ;&nbsp; &nbsp; tmp=tmp[t2k[i]];&nbsp; }&nbsp; tmp=value;}
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答