我想处理一下通过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)
对你有用的话,请点击【采纳此答案】,谢谢🌹