【发布时间】:2019-01-10 09:51:28
【问题描述】:
我创建了一个自定义管道,用于按某些属性对对象数组进行自定义分组:
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({name: 'groupBy'})
export class GroupByPipe implements PipeTransform {
transform(value: Array<any>, field: string): Array<any> {
const groupedObj = value.reduce((prev, cur)=> {
if(!prev[cur[field]]) {
prev[cur[field]] = [cur];
} else {
prev[cur[field]].push(cur);
}
return prev;
}, {});
return Object.keys(groupedObj).map(key => ({ key:key, value: groupedObj[key] }));
}
}
<div>
<h2>Group by department</h2>
<ul>
<li *ngFor="let group of employees | groupBy:'department'">Department{{group.key}}
<ul>
<li *ngFor="let event of group.value">
{{event.firstName}} {{event.lastName}}
</li>
</ul>
</li>
</ul>
这很完美!
但我想做另一件事。
内部示例(app.component): https://stackblitz.com/edit/angular-rc3njv
我有字符串数组:
email = ["bla@gmail.com", "ggg@gmail.com", "zzz@gmail.com","mmm@hotmail.com"]
我想按子字符串对该数组进行分组。例如: @gmail.com 是一组,包含“bla@gmail.com”、“ggg@gmail.com”、“zzz@gmail.com”; @hotmail 是另一个组,包含“mmm@hotmail.com”
有谁知道如何自定义我在示例中实现的管道,以便我可以按子字符串对字符串数组进行分组?
非常感谢!
【问题讨论】:
-
到目前为止你尝试了什么?
标签: javascript angular typescript pipe