javascript - 如何将具有公共属性的javascript数组合并为一个数组?
问题描述
我有一组具有以下结构的对象
[
[
{
exercise: 'Incline Dumbbell Curl',
weight: 25,
workload: 600,
date: '03/23'
},
{
exercise: 'Skullcrushers',
weight: 25,
workload: 600,
date: '03/23'
}
],
[
{
exercise: 'Incline Dumbbell Curl',
weight: 27.333333333333332,
workload: 656,
date: '03/25'
},
{
exercise: 'Skullcrushers',
weight: 31.333333333333332,
workload: 752,
date: '03/25'
}
]
]
我想根据上面的例子创建一个如下所示的数组
[
{
exercise: 'Incline Dumbbell Curl',
weights: [25, 27.33],
workloads: [600, 656],
dates: ['03/23', '03/25']
},
{
exercise: 'Skullcrushers',
weights: [25, 31.33],
workloads: [600, 752],
dates: ['03/23', '03/25']
}
]
基本上,我想将每个具有相同练习名称的条目组合起来,以创建一个包含权重和工作负载的数组。我怎么能实现这样的目标?
解决方案
用于forEach
从数组构建对象。
const data = [
[
{
exercise: "Incline Dumbbell Curl",
weight: 25,
workload: 600,
date: "03/23"
},
{
exercise: "Skullcrushers",
weight: 25,
workload: 600,
date: "03/23"
}
],
[
{
exercise: "Incline Dumbbell Curl",
weight: 27.333333333333332,
workload: 656,
date: "03/25"
},
{
exercise: "Skullcrushers",
weight: 31.333333333333332,
workload: 752,
date: "03/25"
}
]
];
const update = data => {
const arr = data.flat();
const res = {};
arr.forEach(item => {
const newItem = res[item.exercise] || {
exercise: item.exercise,
weight: [],
workload: [],
date: []
};
["weight", "workload", "date"].forEach(key => {
newItem[key].push(item[key]);
});
res[item.exercise] = newItem;
});
return Object.values(res);
};
console.log(update(data));
推荐阅读
- android - Flutter Web Sockets 未连接到 Laravel
- javascript - 为什么连视口都没有达到阈值时,会执行 Intersection Observer API 的回调?
- android - 如何为底部导航设置点击目标
- python - 我可以使用 Keras LSTM 进行一列的时间序列预测吗?
- r - 在R中循环多个数据帧
- javascript - 将捕获的音频上传到服务器。JS jQuery PHP
- python - 如何使用 Python 沿着轮廓边框裁剪图像
- tensorflow - 在 tensorflow 2.4 中被哪个命令 tf.placeholder 替换了?
- vb.net - 如何定义一个函数来接受多个括号内的字符串
- java - JAVA - 来自 ArrayList 的插入排序方法
部分有效,但不能正确排序整个列表