form表单name以点(.)分割如何转json?

原始数据:

let form = {  
    'data': {  
        'user.title': '标题',  
        'data.name': '名字',  
    },  
};  

最终效果:

let json = {  
    'data': {  
        'user': {  
            'title': '标题',  
        },  
        'data': {  
            'name': '名字',  
        },  
    },  
};

复杂一点:

  
let form = {  
    'data': {  
        'user.title': '标题',  
        'user.name': '名字',  
        'data.title': '标题',  
        'data.name': '名字',  
    },  
    'admin.data': {  
        'form.user.title': '标题',  
        'form.user.name': '名字',  
    },  
};  
  
let json = {  
    'data': {  
        'user': {  
            'title': '标题',  
            'name': '名字',  
        },  
        'data': {  
            'title': '标题',  
            'name': '名字',  
        },  
    },  
    'admin': {  
        'data': {  
            'form': {  
                'user': {  
                    'title': '标题',  
                    'name': '名字',  
                },  
            },  
        },  
    },  
};
已解决 悬赏分:60 - 解决时间 2021-11-28 18:06
反对 0举报 0 收藏 0

回答2

最佳
  • @

    测试可以 你瞅瞅!
    Q[GOBEU8PSPU1)D(Z1UBHZ2.png

    function  handle(obj) {
    
    let  obj2 = {};
    
    for (var  k  in  obj) {
    
    var  data = k.split('.');
    
    data.reduce((prev, cur, index, arr) => {
    
    if (!prev[cur]) {//不存在等于空对象
    
    prev[cur] = {};
    
    }
    
    if (index + 1 == arr.length) {
    
    if (Object.prototype.toString.call(obj[k]) === '\[object Object]') {//值为对象递归调用
    
    prev[cur] = handle(obj[k])
    
    } else {
    
    prev[cur] = obj[k]
    
    }
    
      
    
    }
    
    return  prev[cur]
    
      
    
    }, obj2)
    
      
    
    }
    
    return  obj2
    
      
    
    }``
    支持 0 反对 0 举报
    2021-11-28 10:17
  • @
    let form = {  
        'data': {  
            'user.title': '标题',  
            'data.name': '名字',  
        },  
    };  
    let newform = {
    }
    for(let key in form) {
        newform[key] = {};
        for(let j in form[key]) {
            let keyArr = j.split('.');
            newform.data[keyArr[0]] = {}
            newform.data[keyArr[0]][keyArr[1]] = form.data[j]
        }
    }
    支持 0 反对 0 举报
    2021-11-28 10:58