如何将具有公共属性的javascript数组合并到单个数组中?
我有一个具有以下结构的对象数组如何将具有公共属性的javascript数组合并到单个数组中?,javascript,arrays,node.js,json,javascript-objects,Javascript,Arrays,Node.js,Json,Javascript Objects,我有一个具有以下结构的对象数组 [ [ { 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: 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']
}
]
基本上,我希望将具有相同练习名称的每个条目组合起来,以创建一个包含权重和工作负载的数组。
如何实现这样的效果?您可以将2d数组合并为单个数组,然后使用
reduce
处理累积过程
例如:
const数据=[
[
{
练习:“倾斜哑铃卷曲”,
体重:25,
工作量:600,
日期:03/23
},
{
练习:“碎骨机”,
体重:25,
工作量:600,
日期:03/23
}
],
[
{
练习:“倾斜哑铃卷曲”,
重量:27.333332,
工作量:656,
日期:'03/25'
},
{
练习:“碎骨机”,
重量:31.333332,
工作量:752,
日期:'03/25'
}
]
];
//const merged=[…数据[0],…数据[1];
//或
const merged=data.reduce((acc,curr)=>([…curr,…acc]),[]);
const results=合并。reduce((acc,curr)=>{
const match=acc.find(a=>a.exercise==curr.exercise);
如果(!匹配){
加速推({
练习:当前练习,
重量:[当前重量],
工作量:[当前工作量],
日期:[当前日期]
});
}否则{
匹配重量推力(当前重量);
匹配工作负载推送(当前工作负载);
匹配日期推送(当前日期);
}
返回acc;
}, []);
控制台日志(结果)代码>使用forEach
从数组构建对象
const数据=[
[
{
练习:“倾斜哑铃卷曲”,
体重:25,
工作量:600,
日期:“03/23”
},
{
练习:“碎骨机”,
体重:25,
工作量:600,
日期:“03/23”
}
],
[
{
练习:“倾斜哑铃卷曲”,
重量:27.333332,
工作量:656,
日期:“03/25”
},
{
练习:“碎骨机”,
重量:31.333332,
工作量:752,
日期:“03/25”
}
]
];
常数更新=数据=>{
const arr=data.flat();
常数res={};
arr.forEach(项目=>{
const newItem=res[item.exercise]|{
练习:item.exercise,
重量:[],
工作量:[],
日期:[]
};
[“重量”、“工作量”、“日期”]。forEach(关键字=>{
newItem[key].push(item[key]);
});
res[item.exercise]=newItem;
});
返回Object.values(res);
};
控制台日志(更新(数据))代码>你考虑过了吗?我怎么能这样做?您能帮忙吗?您想按练习
类型对它们进行分组。只需在这里搜索“javascript数组group by”,就可以了。将会有很多答案。