角度过滤器和对象合并数组

时间:2019-12-19 15:30:27

标签: arrays typescript

我有:

arrayBefore

arrayBefore = [{name:'n1', items: [i1]}, {name:'n2', items: [i2]}, {name:'n1', items: [i3]}]

我想创建一个函数:

myFunction

myFunction(arrayBefore)

因此它将产生:

arrayAfter

arrayAfter = [{name:'n1', items: [i1, i3]}, {name:'n2', items: [i2]}]

我尝试使用map()和filter()实现myFunction,但是我无法使其正常工作。如果我有一个接近的想法,我将展示一些我尝试过的代码,不幸的是,事实并非如此。任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

这看起来像groupBy操作。仅mapfilter不能执行此操作。您需要一个reduce。查看示例here

答案 1 :(得分:1)

reduce是您要寻找的方法:

const result = arr.reduce((a, {name, items})=>{
     a[name] = a[name] || { name, items:[] };
     a[name].items.push(...items)
     return a;
 }, {});

一个例子:

let arr = [
    { name: 'n1', items: ['i1'] },
    { name: 'n2', items: ['i2'] },
    { name: 'n1', items: ['i3'] }
];

const result = arr.reduce((a, {name, items})=>{
     a[name] = a[name] || { name, items:[] };
     a[name].items.push(...items)
     return a;
 }, {});
 
 console.log(Object.values(result))