yewanji 2021-12-06 16:23 采纳率: 36%
浏览 101
已结题

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
  }
  • 写回答

3条回答 默认 最新

  • baidu_19510369 2021-12-07 10:16
    关注

    基于您的问题,我给了如下的解决方式,稍微有点繁琐,可供参考,需要借助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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 12月15日
  • 已采纳回答 12月7日
  • 赞助了问题酬金 12月6日
  • 修改了问题 12月6日
  • 展开全部

悬赏问题

  • ¥20 有关esp8266连接阿里云
  • ¥15 C# 调用Bartender打印机打印
  • ¥100 华为ens111111111111
  • ¥15 我这个代码哪里有问题 acm 平台上显示错误 90%,我自己运行好像没什么问题
  • ¥50 C#编程中使用printDocument类实现文字排版打印问题
  • ¥15 找会编程的帅哥美女 可以用MATLAB里面的simulink编程,用Keil5编也可以。
  • ¥15 已知隐函数其中一个变量τ的具体值,求另一个变量
  • ¥15 r语言Hurst指数
  • ¥15 Acrn IVSHMEM doorbell问题
  • ¥15 yolov5中的val测试集训练时数量变小问题