Arrays 角度过滤器和合并对象数组
我有: 前面的阵列Arrays 角度过滤器和合并对象数组,arrays,typescript,Arrays,Typescript,我有: 前面的阵列 arrayBefore = [{name:'n1', items: [i1]}, {name:'n2', items: [i2]}, {name:'n1', items: [i3]}] 我想创建一个函数: myFunction myFunction(arrayBefore) 因此,它将产生: arrayaafter arrayAfter = [{name:'n1', items: [i1, i3]}, {name:'n2', items: [i2]}] 我曾尝试使用ma
arrayBefore = [{name:'n1', items: [i1]}, {name:'n2', items: [i2]}, {name:'n1', items: [i3]}]
我想创建一个函数:
myFunction
myFunction(arrayBefore)
因此,它将产生:
arrayaafter
arrayAfter = [{name:'n1', items: [i1, i3]}, {name:'n2', items: [i2]}]
我曾尝试使用map()和filter()实现myFunction,但无法使其正常工作。如果我有接近的想法,我会展示一些我尝试过的代码,不幸的是事实并非如此。任何帮助都将不胜感激 这看起来像是
groupBy
操作。仅通过map
和filter
是不可行的。您需要一个reduce
。请参阅一个示例reduce
方法是您要寻找的:
const result = arr.reduce((a, {name, items})=>{
a[name] = a[name] || { name, items:[] };
a[name].items.push(...items)
return a;
}, {});
例如:
让arr=[
{name:'n1',项:['i1']},
{name:'n2',项:['i2']},
{name:'n1',项:['i3']}
];
const result=arr.reduce((a,{name,items})=>{
a[name]=a[name]|{name,items:[]};
a[name].items.push(…items)
返回a;
}, {});
console.log(Object.values(result))
我花了一些时间才明白发生了什么。但它工作得很完美@尼尔斯福格森我很高兴能帮助你!:)看来这个例子确实是解决办法。我接受了@stepp的答案,因为这是第一个正确的答案。