javascript - 将具有数组作为值的对象映射到对象数组
问题描述
我有以下以数组为值的对象:
{
A: [{date: 21.01.2020, number: 4000}, {date: 22.01.2020, number: 3800}],
B: [{date: 21.01.2020, number: 4000}, {date: 22.01.2020, number: 3800}],
C: [{date: 21.01.2020, number: 4000}, {date: 22.01.2020, number: 3800}]
}
我的目标是将这些数据转换为对象数组:
[
{
"date": "21.01.2020",
"A": 4000,
"B": 4000,
"C": 4000
},
{
"date": "22.01.2020",
"A": 3800,
"B": 3800,
"C": 3800
}
]
我知道我可以使用以下方法从当前对象中获取单个键(A、B、C):
Object.keys(...)
我的问题是我不想通过当前对象本身进行映射,但我需要通过当前对象的值进行映射,包含我需要的数据的数组(初始对象包含3个键值对,目标是将其转换为 2 个对象)。
映射对象的值并创建数组的最佳方法是什么?
解决方案
您可以通过仅使用forEach
. 在这种方法中,我首先按日期对数据进行分组,然后将对象的值返回到一个数组中。
const data = {
A: [{date: '21.01.2020', number: 4000}, {date: '22.01.2020', number: 3800}],
B: [{date: '21.01.2020', number: 4000}, {date: '22.01.2020', number: 3800}],
C: [{date: '21.01.2020', number: 4000}, {date: '22.01.2020', number: 3800}]
};
const res = {};
// Group the data object by the date and make another object
Object.keys(data).forEach(key => {
data[key].forEach(value => {
if (typeof res[value.date] == 'undefined') {
res[value.date] = {};
}
res[value.date].date = value.date;
res[value.date][key] = value.number;
});
});
// Finally make the object as array of object
const output = Object.values(res);
console.log(output);
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- javascript - Google 表格脚本:TypeError:无法读取未定义的属性“changeType”
- python - 如何在多列的熊猫中透视表?
- javascript - laravel 控制器中 vuejs 自动完成的结构对象
- sql - 雪花 SQL 将日期 'YYYY-MM-DD' 转换为 'DD-MM-YYYY'
- sql - 如何在 postgresql 中选择最新数据
- azure-devops - 在 Azure 市场上安全地通过 Azure Functions 获利
- node.js - commitlint config-conventional - 为提交消息添加前缀
- javascript - 提示分配给变量时如何退出无限提示循环
- python - 在python中将字符串和变量写入文件
- java - 将 2 个字符串转换为 2 个数组,结果奇数和偶数,数字在 java 7 中