2016-08-21 64 views
0

我正在創建一個Angular 2應用程序。我的服務器端請求返回給我一個JSON,看起來像用typescript修改JSON

[{"CountryId":1,"CountryCode":"IND","CountryName":"India","State":[]}, 
{"CountryId":2,"CountryCode":"AUS","CountryName":"Australia","State":[]}] 

我需要在下拉菜單中顯示它。所以,我需要創建一個新的JSON看起來像

[{"Label":"India","Value":"IND"}, 
{"Label":"Australia","Value":"AUS"}] 

我不想寫一個循環,我會在很多地方使用這一點,我想這是最好的性能。請讓我知道是否有任何可以做這種JSON重構的內置函數。

+2

您確定需要轉換JSON嗎?無法將UI組件配置爲使用替代鍵作爲標籤和值? – Thilo

+3

'for'循環正是你所需要的(雖然map()更好)。 – SLaks

+0

@Thilo我正在使用自定義庫[primeng](http://www.primefaces.org/primeng/#/dropdown)。這可能現在不支持。 – Vinodtiru

回答

3

除非你確切地知道有多少元素會在你的反應陣列無法從迭代逃避它,儘管你可以選擇如何:

// A 
let result = response.map((elem) => ({ 
    'Label': elem.CountryName, 
    'Value': elem.CountryCode 
})) 


// B 
let result = [] 

response.forEach((elem) => 
    result.push({ 
    'Label': elem.CountryName, 
    'Value': elem.CountryCode 
    }) 
) 


// C 
let result = [] 

for (i in response) { 
    result.push({ 
    'Label': response[i]['CountryName'], 
    'Value': response[i]['CountryCode'] 
    }) 
) 
+3

......並且這很可能不會導致任何性能問題。 – Thilo

+0

Yeap,別擔心,不要用這麼簡單的結構 – martriay

+0

非常感謝。讓我試試這個。 – Vinodtiru

3

使用ES6解構,最緊湊的形式是:

response.map(({CountryCode: Label, CountryName: Value}) => ({Label, Value}))