标记两个可观察数组之间差异的最简单方法

时间:2020-07-30 19:03:28

标签: angular rxjs

我对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$;
}

感谢您的帮助。

1 个答案:

答案 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;
            }));
}