我对angular和rxjs很陌生。
找出可观察对象发出的两个数组之间差异的最简单方法是什么?
在下面的示例中,我尝试获取可用角色的数组,获取已分配角色的数组。
我的目标是标记allRoles$
数组和assignedRoles$
数组中的那些角色:
getAvailableUserRoles(userId: string): Observable < Role[] > {
const allRoles$: Observable<Role[]> = this.getRoles();
const assignedRoles$: Observable<Role[]> = this.getUserRoles(userId);
forkJoin([allRoles$, assignedRoles$])
.pipe(
map(([allRoles, assignedRoles]) => {
for (const allRole of allRoles) {
for (const assignedRole of assignedRoles) {
if (assignedRole.id === allRole.id) {
allRole.assigned = true;
} else
allRole.assigned = false;
}
}
}));
return allRoles$;
}
感谢您的帮助。
答案 0 :(得分:1)
您基本上做对了:
getAvailableUserRoles(userId: string): Observable < Role[] > {
const allRoles$: Observable<Role[]> = this.getRoles();
const assignedRoles$: Observable<Role[]> = this.getUserRoles(userId);
return forkJoin([allRoles$, assignedRoles$])
.pipe(
map(([allRoles, assignedRoles]) => {
allRoles.forEach(role => {
role.assigned = !!assignedRoles.find(assignedRole => role.id === assignedRole.id));
});
return allRoles;
}));
}