2017-05-03 44 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

相關問題