2016-04-19 6 views
0

In meiner Angular 2-Anwendung in der Service-Datei habe ich folgende.Angular 2: Füllen Sie die Checkbox-Liste, indem Sie zwei Listen vergleichen und überprüfen Sie zunächst einige Punkte

service.ts

getUserSelections() { 
    return this.http.get('http://localhost:8080/selection/selections').map((res: Response) => res.json()); 
} 

getSavedSelections() { 
    let params: URLSearchParams = new URLSearchParams(); 
    params.set('access_token', localStorage.getItem('access_token')); 
    return this.http.get('http://localhost:8080/interest/user/selections', { search: params }).map((res: Response) => res.json()); 
} 

getUserSelections json Array folgenden kehrt zurück.

[{ 
    "key": "test1", 
    "val": 1.0 
    }, { 
    "key": "test2", 
    "val": 1.0 
    }, { 
    "key": "test3", 
    "val": 1.0 
    }] 

getSavedSelections folgende Renditen.

[{ 
    "key": "test2", 
    "val": 1.0 
    }, { 
    "key": "test3", 
    "val": 1.0 
    }] 

Ich brauche diese beiden Dienste nicht separat aufzurufen. Sobald ich rufe getUserSelection Ich muss beide nacheinander anrufen, wenn der erste Service erfolgreich ist. Dann möchte ich diese zwei JSON-Arrays vergleichen, 1. Array enthält alle Elemente, 2. enthält einige Elemente aus 1. Array. SO muss ich überprüfen, welche Elemente im 2. Array enthalten sind und ein neues Attribut als "ausgewählt (wahr oder falsch)" zu den Elementen des 1. Arrays hinzufügen. Letztendlich müssen Sie ein Array wie unten beschrieben zurückgeben.

[{ 
    "key": "test1", 
    "val": 1.0, 
    "selected": false 
    }, { 
    "key": "test2", 
    "val": 1.0, 
    "selected": true 
    }, { 
    "key": "test3", 
    "val": 1.0, 
    "selected": true 
    }] 

Alle Vorschläge werden sehr geschätzt.

Antwort

1

Sie könnten die Karte Funktion auf dem ersten Array verwenden. Es wird ein neues Array mit der für jedes Element aufgerufenen Callback-Funktion zurückgegeben.

let result = Array1.map((elem1) => { 
    elem1.selected = false; 
    Array2.forEach((elem2) => { 
    if (elem2.key === elem1.key) 
     elem1.selected = true; 
    }); 
    return elem1; 
}); 
+0

Diese beiden Arrays sind dynamisch – Rose18

+0

Was meinst du? Der Schlüssel zum Vergleichen ist dynamisch? – Romain

+0

JSON-Array-Elemente können geändert werden – Rose18

Verwandte Themen