javascript - 如何使用 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 会帮助缩短这个时间
编辑:我忘了在我的功能结束时删除组
解决方案
不需要 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));
推荐阅读
- apache-spark - 尝试在 Spark 中读取 Parquet 时出错
- arp - 白屏 - 发布 iOS 应用后,应用内容无法加载
- javascript - 如何在按钮单击时切换下拉菜单并在外部单击时关闭?
- android - 从 Firebase 云函数发送通知,通知为空
- jquery - 使用 JQuery 对使用 JQuery 加载的 Id 进行单击时发出警报
- javascript - Thymeleaf 不显示图表
- javascript - 如何在 VScode 中编写 RegExp 字符串,它总是被纠正
- php - Foreach 2 语句和 if 在其中
- c - 执行代码 MSB6006 时出错“CL.exe 使用代码 2 执行
- html - 如何限制容器内溢出的文本?