Я создал пользовательский канал для пользовательского группирования массива объектов по некоторому свойству:
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"
Кто-нибудь знает, как настроить конвейер, который я реализую в примере, чтобы я мог группировать массив строк по подстроке?
Большое спасибо!