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
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值