javascript - 通过对另一个对象数组进行排序来创建对象数组
问题描述
我想创建一个对象数组,每个数据对象的第一个元素是一个单独的对象,每个数据对象的第二个元素是另一个单独的对象,依此类推......
let array = [{
data: {
center1: "1",
storage1: "1",
system1: "1",
}
},
{
data: {
center2: "2",
storage2: "2",
system2: "2",
}
}
]
预期结果:
[
{ center1: "1", center2: "2"},
{ storage1: "1", storage2: "2"},
{ system1: "1", system2: "2"}
]
这就是我试图做的,但效果不佳:)
const rows = [];
array.forEach((item, index) => {
for (let key in item.data) {
rows.push({index : key + ': ' + item.data[key]});
}
});
输出是这样的:
[
{index : 'center1: 1'},
{index : 'storage1: 1'},
{index : 'system1: 1'},
{index : 'center2: 2'},
{index : 'storage2: 2'},
{index : 'system2: 2'}
]
谢谢您的帮助!
解决方案
这将是非常脆弱的,因为键顺序与 JS 对象的工作方式无关,并且“每个对象中的第一个键是同一种键”的假设实际上只是一个假设。因此,首先要解决的问题是让所有这些对象使用相同的键,而不是唯一键,从而使“键排序”变得无关紧要。
但是,如果这不是一个选项(几乎可以肯定,但如果不是),那么Object.entries会将任何对象转换为键/值数组,然后您可以使用它来重构此数据:
let array = [{
data: {
center1: "1",
storage1: "1",
system1: "1",
}
},
{
data: {
center2: "2",
storage2: "2",
system2: "2",
}
}
]
const restructured = array.reduce((result, e) => {
Object.entries(e.data).forEach(([key, val], pos) => {
if (!result[pos]) result[pos] = {};
result[pos][key] = val;
});
return result;
}, []);
console.log(restructured);
推荐阅读
- c# - getByIds 的 Microsoft.Graph 方法未返回包含其所有属性的完整对象
- html - 如何在html中创建嵌套表
- database - 在 Flutter 中使用 moor 时使用关键字时出错
- node.js - 如何在nodejs中进行作业调度?
- python - 为什么 csv 输出与 pandas 中的原始输出不同
- printing - 在 Windows 中打印整页
- typescript - 如何在不使用 as 的情况下确保 TypeScript 的 string|string[] 是字符串?
- php - 试图在 Wordpress 的 wp-includes/post.php 中获取非对象的属性“ID”
- vue.js - Vue.js “超出最大调用堆栈大小”错误。对子使用对话框并将数据从父级传递给子级失败
- date - 如何使用 Firestore 仅从特定日期获取数据?