angular - 加入两个可观察对象并删除重复项
问题描述
我在 Angular 9 中调用了两种服务方法,如下所示:
var u1 = this.userService.getByDepartmentId(departmentId).pipe(
map((payload: Payload<GetByDepartmentIdModel[]>) =>
payload.result.map((user: GetByDepartmentIdModel) => {
return {
id: user.id,
forename: user.forename,
surname: user.surname
};
})));
var u2 = this.userService.getByStoreId(storeId).pipe(
map((payload: Payload<GetByStoreIdModel[]>) =>
payload.result.map((user: GetByStoreIdModel) => {
return {
id: user.id,
forename: user.forename,
surname: user.surname
};
})));
方法getByDepartmentId
和getByStoreId
返回一个Observable<Payload<GetByDepartmentIdModel[]>
和Observable<Payload<GetByStoreIdModel[]>>
。
如何加入这两个响应,u1
并u2
删除重复项(比较 user.id)?
解决方案
好吧,你首先使用forkJoin
组合 observables,然后你用 做一个基本的数组方法concat
,filter
将它映射到你想要的对象,你就完成了:
forkJoin([
this.userService.getByDepartmentId(departmentId),
this.userService.getByStoreId(storeId)
]).pipe(
map(([ depPayload, storePayload ]) => depPayload.result.concat(storePayload.result)
.filter(({ id }, i, arr) => arr.findIndex((subj) => subj.id === id) === i)
.map(({ id, forename, surname }) => ({ id, forename, surname })
);
推荐阅读
- python - 如何使用 pandas.read_excel() 直接从 Dropbox 的 API 读取 Excel 文件?
- javascript - 如何返回分离的元素?
- c# - 模板化控件中的 ContentPresenter 不起作用
- php - PHP 标头仅在 html 表单完全填满时才有效
- php - Laravel Eloquent 查询检查重叠的开始和结束日期时间字段
- dart - 在按下按钮时创建新的小部件
- javascript - childNode 的 DOM 返回值
- sql-server - 与 Microsoft SQL Server 的 ODBC 连接
- jenkins - jenkins pod 模板文件在其他阶段不可见
- jquery - JQuery延迟异常:不允许重复参数