【发布时间】:2020-04-12 15:53:47
【问题描述】:
如何合并具有相同键的对象,例如:
{id: 222, date: 'apr 1', todo: 'nothing' },
{id: 222, date: 'apr 2', todo: '' },
{id: 222, date: 'apr 3', todo: 'swim' },
{id: 222, date: 'apr 4', todo: 'run' },
{id: 222, date: 'apr 1', todo : ''},
{id: 222, date: 'apr 2', todo : 'jump'},
{id: 222, date: 'apr 3', todo : ''},
{id: 222, date: 'apr 4', todo : ''}
结果应该是
{id: 222,
date1: 'apr 1', todo1: 'nothing',
date2: 'apr 2', todo2: 'jump',
date3: 'apr 3', todo3: 'swim',
date4: 'apr 4', todo4: 'run'
}
我设法以某种方式合并它,但相反,我得到了这个结果......
{id:222, date1: 'apr 1', todo1: 'nothing',
date2: 'apr 2', todo2: '',
date3: 'apr 3', todo3: 'swim',
date4: 'apr 4', todo4: 'run',
date5: 'apr 1', todo5: '',
date6: 'apr 2', todo6: 'jump'
date7: 'apr 3', todo7: '',
date8: 'apr 4', todo8: ''
}
这是我的代码:
var result = Object.values(temp.reduce((r, { id, date, todo }) => {
if (r[id]){
r[id].payload['date' + r[id].index] = date;
r[id].payload['todo' + r[id].index] = todo;
r[id].index++;
}
else r[id] = { index: 2, payload: { id, date, todo } };
return r;
}, {}))
.map(({ payload }) => payload);
【问题讨论】:
-
如果你在同一个组中有更多的待办事项怎么办?
-
什么意思?
-
@NinaScholz 哦,我明白了,我会编辑我的问题。我提供了错误的结构
-
@aznmik 您想要排序、过滤然后归约。请参阅我的更新答案。
标签: javascript arrays object javascript-objects