javascript - 将对象的 Pivot 或 GroupBy 对象转换为 Javascript 中的对象数组
问题描述
我有以下 JavaScript 对象。我需要从给定的对象生成一个新的对象数组。我应该在 JavaScript 中采用什么方法?
const ObjOfObj = {
'virus': [
{
'2016': 67,
'2017': 59,
'2018': 18,
'2019': 1
}
],
'cure': [
{
'2016': 51,
'2017': 50,
'2018': 16,
'2019': 1
}
]
};
如何转换或旋转以生成以下对象数组?
const ArrOfObj = [
{'year': '2016', 'virus': 67, 'cure' : 51},
{'year': '2017', 'virus': 59, 'cure' : 50},
{'year': '2018', 'virus': 18, 'cure' : 16},
{'year': '2019', 'virus': 1, 'cure' : 1},
]
解决方案
你可以使用这样的reduce函数。
const ObjOfObj = {
'virus': [
{
'2016': 67,
'2017': 59,
'2018': 18,
'2019': 1
}
],
'cure': [
{
'2016': 51,
'2017': 50,
'2018': 16,
'2019': 1
}
]
};
const groupBy = (obj) => {
const keys = Object.keys(obj);
const mapping = keys.reduce((acc, k) => {
obj[k].forEach(item => {
Object.keys(item).forEach(yearKey => {
tracked = acc[yearKey];
if (!tracked) {
acc[yearKey] = {
year: yearKey
};
}
acc[yearKey][k] = (acc[yearKey][k] | 0) + item[yearKey];
});
});
return acc;
}, {});
return Object.entries(mapping);
};
console.log(groupBy(ObjOfObj));
推荐阅读
- python - 如何在 pandas 中读取数据框中的 2 列并返回数据列表列表?
- python-3.x - 使用 xPath Python Selenium 无法单击底部
- powershell - 以编程方式停止 Avecto Defendpoint
- apache-spark - 如果运行 .foreach() 的节点失败,Spark 会做什么?
- python - 为什么克隆 FloatField 的这个子类(添加了验证器)会引发异常?
- regex - CSV 文件中的正则表达式搜索和替换值
- css - 是否可以在一个类中为不同的屏幕尺寸使用不同的 CSS
- c++ - 注意:在编译类模板成员函数C++时
- java - method.invoke 上的参数数量错误
- r - 在 R 中使用表中的列来创建新表