如何把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)})