首页 > 解决方案 > 如何使用 Lodash 在 Typescript 中展平我的示例对象?

问题描述

我需要展平输入 json 并使用相同的键合并对象。预期对象具有如下示例的结构:

{
  "error": {
     "group1": {
         "mapping":
             [{"0": "mapping1"},
              {"1": "mapping1"}],
         "other": 
             [{"0": "other0"}]
    },
    "group2": {
         "mapping": 
             [{"0": "mapping2"},
              {"1": "mapping2"}]

    }
  }
}

所以我想摆脱群体,只保留群体子的类型。输出应该是:

{
  "error": {
      "mapping":
        [{"0": "mapping1"},
         {"1": "mapping1"},
         {"0": "mapping2"},
         {"1": "mapping2"}]
      "other": 
        [{"0": "other0"}]
  }
}

我是 JavaScript 新手,这是我的代码,我相信它可以做得更好:

function flattenReport(obj) {
    var reports = Object.keys(obj.error)
        for (report in reports) {
            var pos = obj.error[reports[report]]
            var types = Object.keys(pos)
            for (type in types) {
                var pos1 = pos[types[type]]
                var elements = Object.keys(pos1)
                for (element in elements) {
                    if (types[type] in obj.error) {
                        obj.error[types[type]].push(pos1[element])
                }
                else {
                    obj.error[types[type]] = []
                    obj.error[types[type]].push(pos1[element])
                }
            }
        } 
    }
    return obj
}

我认为 Lodash 会帮助缩短这个时间

编辑:我忘了在我的功能结束时删除组

标签: javascriptlodash

解决方案


不需要 lodash,这很容易用一个嵌套循环来完成。因为您不想对值数组做任何事情,除了将它们连接到该键的新数组中,您可以使用concat代替push

function flattenReport(initialObj) {
  const newGroupsObj = {};
  Object.values(initialObj.error).forEach((obj) => {
    Object.entries(obj).forEach(([key, arr]) => {
      newGroupsObj[key] = (newGroupsObj[key] || []).concat(arr);
    });
  });
  return { error: newGroupsObj };
}

const obj = {
  "error": {
    "group1": {
      "mapping": [{
          "0": "mapping1"
        },
        {
          "1": "mapping1"
        }
      ],
      "other": [{
        "0": "other0"
      }]
    },
    "group2": {
      "mapping": [{
          "0": "mapping2"
        },
        {
          "1": "mapping2"
        }
      ]

    }
  }
};

console.log(flattenReport(obj));


推荐阅读