form表单多维对象赋值

原数据

let obj = {
          
   
    a.b.c:111,
    // c:2,
    a.b.d:3,
    date.name:ceso
}

目标数据

{
          
    a: {
          
    b: {
          
    c: 111, d: 3 } },
  date: {
          
    name: ceso } }

案例

let obj = {
          
   
    a.b.c:111,
    // c:2,
    a.b.d:3,
    date.name:ceso
}
var deepExtend = require(deep-extend);//这个是写好的插件
deepExtend1//是本人简化版本的 不是特别严谨但是能用 

let arrvalue =[]
let arrkey =[]
for (const key in obj) {
          
   
    if (Object.hasOwnProperty.call(obj, key)) {
          
   
        const element = obj[key];
        arrkey.push(key.split(.))
        arrvalue.push(element)
    }
}
let newObjArr =[]
for (let index = 0; index < arrkey.length; index++) {
          
   
    let element = arrkey[index];
    // console.log(element :>> , element);
    let arrsss =element.reverse().reduce((obj,currentValue,c,Arr)=>{
          
   
        let objNew ={
          
   }
        if(c==0){
          
   
            obj[currentValue] =arrvalue[index]
            objNew = obj
        }else{
          
   
            let objs= {
          
   }
            objs[currentValue] = obj
            objNew =  objs
        }
        return  objNew
    },{
          
   })  
    newObjArr.push(arrsss)
}
let arr = newObjArr.reduce((obj,currentValue,c,Arr)=>{
          
   
    if(c==0){
          
   
        obj = currentValue
        return obj
    }
    return deepExtend1(obj,currentValue)
},{
          
   })  
function deepExtend1(obj1,obj2) {
          
   
  let target = obj1
    Object.keys(obj2)
    .forEach(key=>{
          
   
        if(typeof target[key]==object){
          
   
            deepExtend1(target[key],obj2[key])
            return
        }else if(!target[key]){
          
   
            target[key]=obj2[key]
        }
        else {
          
   
            deepExtend1({
          
   },obj2[key])
            return
        }
    })
    return target
}
经验分享 程序员 微信小程序 职场和发展