过滤正在过滤TypeScript的可观察对象的数组

时间:2017-05-03 07:52:55

标签: angular typescript observable

我觉得这很难解释,但是我将通用数据库服务中的observable传递给我的组件。

方法如下:

getCollectionThroughDivisionId(id: UUID): Observable<T[]> {
    return this._table.watch().map(returnedObjects => 
        returnedObjects.filter(returnedObject => returnedObject.divisionId == id)
    );
}

上述方法返回一个通用对象的可观察数组,通过其divisionId

进行过滤

事情是我需要一个方法来过滤returnObject中的数组

getCollectionThroughUserId(id: UUID): Observable<T[]> {
    return this._table.watch().map(returnedObjects => 
        returnedObjects.filter(returnedObject => returnedObject.userId.filter(x => x == id))
    );
}

参数userId是一个id的数组,但默认返回整个集合(不会抛出错误)。

编辑:

对象模型:

export class Task {
    id: string;
    name: string;

    userId: string[];
    projectId: string;

    public constructor(init?: Partial<ITask>) {
        Object.assign(this, init);
    }
}

Json示例:

{
"id":  "TA18XVBJ3584ZM3" ,
"name":  "User documentation & technical documentation" ,
"projectId":  "PRYH3C72C6CQKZS" ,
"userId": [
    "USGC6W4RCERY2ET",
    "USKWQYHKB8E3X2U"
    ]
}

目标:迭代每个任务,检查userId数组是否包含传递的userId

1 个答案:

答案 0 :(得分:1)

除了听起来你从服务器获取数据的事实,你不应该被允许看到(通常过滤掉用户不应该看到的东西是后端工作)。

您真正需要做的就是返回 id 是否在 userIds 的对象列表中。

getCollectionThroughUserId(id: UUID): Observable<T[]> {
    return this._table.watch().map(returnedObjects => 
        returnedObjects.filter(returnedObject => returnedObject.userId.indexOf(id) !== -1)
    );
}

这将从列表中删除 userId 列表中没有 id 的任何returnedObject。