以下是一个示例解决方案,它将一个包含日期和对象的数组按日期进行分组,并重新映射为包含日期和对象数组的新对象:
// 原始数组
const arr = [
{ date: '2022-01-01', obj: { name: 'A' } },
{ date: '2022-01-01', obj: { name: 'B' } },
{ date: '2022-01-02', obj: { name: 'C' } },
{ date: '2022-01-02', obj: { name: 'D' } },
{ date: '2022-01-03', obj: { name: 'E' } }
];
// 用于存储分组后的结果的对象
const groupedObj = {};
// 遍历原始数组
arr.forEach(item => {
const { date, obj } = item;
// 如果日期不存在作为键的对象中,则创建一个空数组作为值
if (!groupedObj[date]) {
groupedObj[date] = [];
}
// 将对象添加到对应日期的数组中
groupedObj[date].push(obj);
});
// 重新映射为包含日期和对象数组的新对象
const mappedObj = Object.keys(groupedObj).map(date => ({
date,
objs: groupedObj[date]
}));
console.log(mappedObj);
运行以上代码将输出以下结果:
[
{ date: '2022-01-01', objs: [ { name: 'A' }, { name: 'B' } ] },
{ date: '2022-01-02', objs: [ { name: 'C' }, { name: 'D' } ] },
{ date: '2022-01-03', objs: [ { name: 'E' } ] }
]
这样,原始数组按日期进行了分组,并且每个日期都映射为包含日期和对象数组的新对象。