javascript - 如何将嵌套对象拆分为对象数组 - 避免 for 循环
问题描述
我想将嵌套对象拆分为对象数组。我可以使用两个 FOR 循环来实现相同的目标。
有什么办法可以让我有更好的解决方案,或者这是正确的?
以下片段供参考。
var Input = {
"English": {
"v1": "10",
"v2": "11",
"v3": "34"
},
"Hindi": {
"v1": "14",
"v2": "16",
"v3": "18"
}
}
var Output = []
for (let i = 0; i < Object.keys(Input).length; i++) {
for (let j = 0; j<Object.keys(Object.values(Input)[i]).length; j++) {
Output.push({
"parameter": Object.keys(Input)[i],
"machine": Object.keys(Object.values(Input)[i])[j],
"value":Object.values(Object.values(Input)[i])[j]
})
}
}
console.log(Output)
解决方案
你可以使用Object.entries()
and Array.flatMap()
:
var Input = {
English: {
v1: "10",
v2: "11",
v3: "34",
},
Hindi: {
v1: "14",
v2: "16",
v3: "18",
},
};
const Output = Object.entries(Input).flatMap(([parameter, values]) =>
Object.entries(values).map(([machine, value]) => ({
parameter,
machine,
value,
}))
);
console.log(Output);
这里.flatMap()
将由创建的数组展平Object.entries().map()
为一个大数组。它还使用数组解构从产生的元组中挑选出键和值Object.entries()
。
推荐阅读
- visual-studio - winapi 奇怪字符 const char*
- android - Android Studio gradle 同步失败:没有缓存版本
- c# - C# - 无法从数据库中检索实体
- javascript - 在鼠标悬停时删除另一个 DOM 对象中第 n 个元素的类
- python - 如何列出和更改 Python heapq 中的元素而不弹出它们?
- c# - 在 C#/ASP.Net 中将数据表转换为文本而不是 JSON
- asp.net - 如何使用下拉列表从外键原始表中引用不同的列并将其保存在外键新表中?
- android - 使 android 应用程序仅以纵向或反向纵向工作
- html - Vim 插件可处理自定义 HTML 标签和 SCSS
- javascript - 在 react-native TextInput 中的 parseInt() 之后的值是 NaN