2017-05-03 40 views
0

我觉得这很难解释,但我从我的通用数据库服务传递observables到我的组件。正在过滤的可观察对象的数组TypeScript

的方法是这样的:

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

上述方法返回一个通用对象的可观察到的阵列,通过它divisionId过滤

的事情是我需要过滤内部的阵列的方法returnedObject为一个ID

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

参数userId是一个ID的数组,但默认返回整个集合(没有thr由于错误)。

编辑:

对象模型:

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" 
    ] 
} 

的目标是:遍历每个任务,检查用户id数组,如果它包含了通过用户id

+0

过滤器可能不是正确的方法在这里使用,您应该使用地图,而不是为了将returnedObjects映射到具有较少用户ID的对象。 :) – toskv

+0

我不太明白你的意思,我需要检查每个对象中的每个userId。你有可能给我一个例子吗? – Laurens

+0

只是为了得到这个。你想要做的是从returnedObject.userId属性中过滤出用户ID。如果你有{userId:[1,2]}和id = 1,你应该找回{userId:[1]}? – toskv

回答

1

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

你真正需要做的是返回ID是否在的userIds对象名单。

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

这将从列表中的任何returnedObject不具备ID用户id列表中删除。

+1

你确定userId不是null吗?如果它是一个空列表,它应该没问题。你能发布你得到的错误吗? – toskv

+0

要删除我的评论,您的代码工作正常。谢谢您的帮助! – Laurens

相关问题