2017-05-03 5 views
0

Ich habe das Gefühl, dass dies schwer zu erklären ist, aber ich gebe Observables von meinem generischen DB-Service an meine Komponenten weiter.Filtern des Arrays eines beobachtbaren Objekts, das gefiltert wird TypeScript

Die Methoden wie folgt aussehen:

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

Die obige Methode gibt eine beobachtbare Anordnung eines generischen Objekts, gefiltert durch seine divisionId

Die Dinge, die ich eine Methode benötigen, die innerhalb der ein Array-Filter returnedObject für eine ID

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

der Parameter userId ist ein Array von IDs, aber das standardmäßig die gesamte Kollektion der Rückkehr (ohne thr aufgrund eines Fehlers).

edit:

Das Objektmodell:

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

    userId: string[]; 
    projectId: string; 

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

Json Beispiel:

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

Das Ziel: jede Aufgabe durchlaufen, überprüfen Sie die userId Array, wenn es das übergebene userId enthält

+0

Filter ist wahrscheinlich nicht die richtige Methode hier zu verwenden, Sie sollten wahrscheinlich stattdessen map verwenden, um die returnedObjects Objekten zuzuweisen, die weniger userIDs haben. :) – toskv

+0

Ich verstehe nicht ganz, was Sie meinen, ich muss jede userId in jedem Objekt überprüfen. Kannst du mir ein Beispiel geben? – Laurens

+0

nur um das klar zu machen. Was Sie tun möchten, ist Benutzer-IDs aus der zurückgegebenenObject.userId -Eigenschaft herauszufiltern. Wenn Sie {userId: [1,2]} und id = 1 haben, sollten Sie {userId: [1]} zurückerhalten? – toskv

Antwort

1

Neben der Tatsache, dass es klingt wie Sie Daten von dem Server erhalten, die Sie sho und nicht sehen dürfen (normalerweise filtert man Dinge, die der Benutzer nicht sehen sollte, ist der Backend-Job).

Alles, was Sie wirklich tun müssen, ist, ob die Rückkehr id in der Objekte Liste der userIds ist.

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

Diese aus der Liste entfernen wird jede returnedObject, die nicht die id in der userId Liste hat.

+1

Sind Sie sicher, dass userId nicht null ist? Wenn es eine leere Liste ist, sollte es in Ordnung sein. Können Sie den Fehler posten, den Sie bekommen? – toskv

+0

Um meinen Kommentar zu löschen, funktioniert Ihr Code gut. Danke für die Hilfe! – Laurens

Verwandte Themen