如何在合并其中一个字段的同时在 JavaScript 中减少数组
看,我们有以下对象数组-
const arr = [{ id: 121, hobby: 'cycling' }, { id: 125, hobby: 'jogging' }, { id: 129, hobby: 'reading' }, { id: 121, hobby: 'writing' }, { id: 121, hobby: 'playing football' }, { id: 125, hobby: 'cooking' }, { id: 129, hobby: 'horse riding' }];
比方说,我们必须编写一个函数,接收这样一个数组并根据公共id属性合并它,对于爱好属性,我们为其分配一个数组,并将特定id的所有爱好放在那里。
我们将使用数组。方法来迭代数组并同时合并具有相同索引的条目。prototype.reduce()
这样做的代码将是-
示例
const arr = [{ id: 121, hobby: 'cycling' }, { id: 125, hobby: 'jogging' }, { id: 129, hobby: 'reading' }, { id: 121, hobby: 'writing' }, { id: 121, hobby: 'playing football' }, { id: 125, hobby: 'cooking' }, { id: 129, hobby: 'horse riding' }]; const mergeArray = (arr) => { return arr.reduce((acc, val) => { const ind = acc.findIndex(item =>item.id=== val.id); if(ind !== -1){ acc[ind].hobby.push(val.hobby); }else{ acc.push({ id: val.id,hobby: [val.hobby] }); }; return acc; }, []); }; console.log(mergeArray(arr));输出结果
控制台中的输出将是-
[ { id: 121, hobby: [ 'cycling', 'writing', 'playing football' ] }, { id: 125, hobby: [ 'jogging', 'cooking' ] }, { id: 129, hobby: [ 'reading', 'horse riding' ] } ]