2016-04-19 52 views
0

在我的服務文件中的Angular 2應用程序中,我有以下內容。角2:填充複選框列表比較兩個列表,並最初檢查一些項目

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數組回報。

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

getSavedSelections回報以下。

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

我不需要分別調用這兩個服務。一旦我致電getUserSelection如果第一次服務成功,我需要一個接一個地調用它。然後我想比較這兩個json數組,第一個數組包含所有項目,第二個包含第一個數組中的一些項目。所以我需要檢查第二個數組中包含哪些項目,並向第一個數組的項目添加新的屬性爲「selected(true或false)」。最終,需要返回一個數組,如下所示。

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

任何建議,非常感謝。

回答

1

您可以使用第一個陣列上地圖功能。它會返回一個新的數組,並在每個項目上調用回調函數。

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

這兩個數組是動態的 – Rose18

+0

你是什麼意思?比較的關鍵是動態的? – Romain

+0

JSON數組項目我可以改變 – Rose18

相關問題