js将扁平化json变成树状结构

     我需要转成如下格式
       {
           student:{
             name:"张三",
             age:18,
             feature:{
                weight:80,
                hegiht:168
             }
          }
       }


 // 原数据格式
  var result={
    "student.name":"张三",
    "student.age":18,
    "student.feature.weight":80,
    "student.feature.height":168
  }

基于您的问题,我给了如下的解决方式,稍微有点繁琐,可供参考,需要借助loadsh的深度对象拷贝方法,如果自己写也行(这个深度拷贝方法),代码如下。

  1. loadsh的引入https://cdn.bootcdn.net/ajax/libs/lodash.js/4.17.21/lodash.min.js(%E4%B8%BA%E4%BA%86%E4%BD%BF%E7%94%A8%E6%B7%B1%E5%BA%A6%E6%8B%B7%E8%B4%9D%E6%96%B9%E6%B3%95%EF%BC%8C%E5%8F%AF%E4%BB%A5%E8%87%AA%E5%B7%B1%E5%86%99%EF%BC%8C%E4%B8%8D%E9%9C%80%E8%A6%81%E5%BC%95%E5%85%A5%E6%96%B9%E6%B3%95%E4%B9%9F%E8%A1%8C)
  2. // 原数据格式
    const result = {
    "title": "asfff",
    "student.name": "张三",
    "student.age": 18,
    "student.feature.weight": 80,
    "student.feature.height": 168,
    "student.highSchool.1": 20,
    "student.highSchool.3": 80
    };
    代码:
    let obj = {},
    stObj = [];
    const objectReverseTree = (data) => {
    let retData = Object.entries(data);
    for (let i = 0, len = retData.length; i < len; i++) {
    const item = retData[i];
    let first = item[0].split(".");
    if (first.length === 1) {
     obj[first] = item[1];
    
    } else {
     let ss = first.reduceRight((pre, next) => ({
       [next]: pre
     }), item[1]);
     stObj.push(ss);
    
    }
    }
    const newObj = _.defaultsDeep(obj, ...stObj);
    console.log(newObj, '-------stObj----')
    return newObj;
    };

objectReverseTree(result);
//

img

纯属参考,如有帮助,望指教 采纳

你这个层级 会不确定吗 。



```javascript
function deal(data) {
        if (Object(data) !== data || Array.isArray(data))
            return data;
        var result = {}, cur, prop, idx, last, temp;
        for(var p in data) {
            cur = result, prop = "", last = 0;
            do {
                idx = p.indexOf(".", last);
                temp = p.substring(last, idx !== -1 ? idx : undefined);
                cur = cur[prop] || (cur[prop] = (!isNaN(parseInt(temp)) ? [] : {}));
                prop = temp;
                last = idx + 1;
            } while(idx >= 0);
            cur[prop] = data[p];
        }
        return result[""];
    }
 // 原数据格式
  var result={
    "student.name":"张三",
    "student.age":18,
    "student.feature.weight":80,
    "student.feature.height":168
  }
console.log(deal(result))

```