如何将具有公共属性的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”,就可以了。将会有很多答案。