Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 角度过滤器和合并对象数组_Arrays_Typescript - Fatal编程技术网

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的答案,因为这是第一个正确的答案。