如何把字符串a.b.c=1转为对象

我想处理一下通过antd 的form表单拿到字段a.b.c=1和a.b.d=2后,我想处理一下,大家有什么好的想法

拿到的数据:

a.b.c:1,
a.b.d:2

想处理成:
{
a:{
b:{
c:1,
d:2

    }
 }

}


var obj = {
  "a": 3,
  "a.b.c": 1,
  "a.b.d": 2,
  "a.b.e": {
    "j.k.f": 1
  }
}

function desc(obj) {
  const temp = {}
  each(obj, temp)
  function each (obj, temp) {
    for (keys in obj) {
      keys.split(".").reduce((prev, current, index, arr) => {
        let k = `${prev}.${current}`
        eval(`
          if (prev) {
            if (typeof temp${prev} !== "object") {
              temp${prev} = {}
            }
          };
          if (typeof obj[k.substr(1)] !== "object") {
            temp${k} = temp${k} ? temp${k} : obj[k.substr(1)] ? obj[k.substr(1)] : {};
          }else {
            temp${k} = {}
          }
        `)
        return k
      }, "")
      if (keys.indexOf('.') !== -1 && typeof obj[keys] === "object") {
        eval(`each(obj[keys], temp.${keys})`)
      }
    }
  }
  return temp
}

desc(obj)

自己实现了一下,楼主有好方法抖我一下


let cc = {'A': 1, 'B.A': 2, 'B.B': 3, 'CC.D.E': 4, 'CC.D.F': 5}
var printOut = function(cc){
  let res = {};
  let loca = {};
  Object.keys(cc).forEach((item,index)=>{
    let temp = item.split('.');
    loca = res
    temp.forEach((itemson,indexson)=>{
       if( loca[itemson]){
         loca=loca[itemson];
       }else{
         if(indexson===temp.length-1){
           loca[itemson] = cc[item]
         }else{
           loca[itemson] = {};
         }
         loca=loca[itemson];
       }
    })
  })
  console.log(res)
}
printOut(cc)

对你有用的话,请点击【采纳此答案】,谢谢🌹