#angular #typescript #rxjs #observable
Вопрос:
У меня есть объект наблюдения, содержащий массив объектов новостных статей, которые я хочу сгруппировать по дате, чтобы я мог использовать его в своем шаблоне.
Я читал об операторе groupBy, но пока не могу заставить его работать. Я настроил массив, который заполняю массивом элементов в моем наблюдаемом:
export class NewsArchiveComponent implements OnInit {
archivedNews$: Observable<NewsItemPage> | undefined;
newsItems: NewsItem[] = [];
constructor(private newsService: NewsService) { }
ngOnInit(): void {
this.archivedNews$ = this.newsService.newsPerYear();
this.fillNewsArray();
}
fillNewsArray() {
this.archivedNews$?.subscribe(x => {
this.newsItems = x.items;
console.log(x);
console.log(this.newsItems);
});
}
}
Я попытался сгруппировать свои элементы следующим образом, но это не сработало, и он не вошел в консоль:
groupNewsItems() {
of(this.newsItems)
.pipe(
concatMap(res => res),
groupBy(item => item.publicationdate),
mergeMap(group => zip(of(group.key), group.pipe(toArray())))
)
.subscribe(console.log);
}
Ответ №1:
Используйте from
вместо of
и попробуйте следующее:
import { from, of, zip } from 'rxjs';
import { groupBy, mergeMap, toArray } from 'rxjs/operators';
from(this.newsItems)
.pipe(
concatMap(res => res),
groupBy(
item => item.publicationdate
),
mergeMap(group => zip(of(group.key), group.pipe(toArray())))
)
.subscribe(console.log);