为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕森王 2019-03-14 19:15:27
有一个对象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})谢谢各位大佬帮忙
查看完整描述

3 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

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}}}


查看完整回答
反对 回复 2019-04-02
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

function setObjfromText(obj,text,value){

    let temp=obj

    let textgroup = text.split('.')

    let l = textgroup.length

    for(let i=0;i<l-1;i++){

      temp[textgroup[i]] = typeof(temp[textgroup[i]])=='object'?temp[textgroup[i]]:{}

      temp = temp[textgroup[i]]

    }

    temp[textgroup[l-1]] = temp[textgroup[l-1]] | value

    return obj

}


查看完整回答
反对 回复 2019-04-02
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

function setObjText(o,t,v){ //因为是设置,所以我理解已经有这个结构否则需要保证路径上各级都是对象

let tmp=o;

let t2k=t.split('.');

for(let i=0;i<t2k.length;i++){

    tmp[t2k[i]]=typeof(tmp[t2k[i]])=='object'?tmp[t2k[i]]:{} ;

    tmp=tmp[t2k[i]];

  }

  tmp=value;

}


查看完整回答
反对 回复 2019-04-02
  • 3 回答
  • 0 关注
  • 490 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信