如何把str = {a.b.c:1,a.b.d:2,g.h.u:2,g.h.t:9}转换为{a:{b:{c:1,d:2}},g:{h:{u:2,t:9}}

如何把str = {a.b.c:1,a.b.d:2,g.h.u:2,g.h.t:9}转换为{a:{b:{c:1,d:2}},g:{h:{u:2,t:9}}

以下代码采用递归执行,不论有多少层级,都可以封装

let str = {
    'a.b.c': 1,
    'a.b.d': 2,
    'g.h.u': 2,
    'g.h.t': 9,
    'g.h.k.l': 5,
}
let result = {};
function assemble(index, keys, value, obj) {
    if (index == keys.length - 1) {
        obj[keys[index]] = value;
        return;
    } else {
        if(!obj[keys[index]]){
            obj[keys[index]] = {};
        }
        assemble(index+1, keys, value, obj[keys[index]]);
    }
}
for (let item in str) {
    let keys = item.split(".");
    assemble(0, keys, str[item], result);
}
console.log(result)

每太理解你的意思,是把字符串转换成对象吗?

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)
    const str = {'a.b.c': 1, 'a.b.d': 2, 'g.h.u': 2, 'g.h.t': 9}
    const res = {}
    for (let [cur, value] of Object.entries(str)) {
        const arr = cur.split('.')
        res[arr[0]] ? null : res[arr[0]] = {}
        res[arr[0]][arr[1]] ? null : res[arr[0]][arr[1]] = {}
        res[arr[0]][arr[1]][arr[2]] = value
    }
    console.log(res)

function fn(obj) {
  let res = {};
  for (let key in obj) {
    let keys = key.split("."), data = res;
    for (let i = 0; i < keys.length; i++) {
      if (i == keys.length -1) {
        data[keys[i]] = obj[key];
      } else {
        data = data[keys[i]] ? data[keys[i]] : (data[keys[i]] = {});
      }
    }
  }
  return res;
}
fn({"a.b.c": 1, "b.a.c": 3, "data.a1.b2": 4, "a.b.a": 2});

var o = {}
Object.entries(str).forEach(([k,v])=>{_.set(o,k,v)})