2016-08-21 8 views
0

私はAngular 2アプリケーションを作成しています。私のサーバー側の要求から、私のようなJSONが返されますJSONをtypescriptで変更します。

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

これをドロップダウンに表示する必要があります。だから私は

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

のようになります。新しいJSONを作成する必要があり、私は私が多くの場所でこれを使用するように、ループのために書きたいいけないと私はそれがパフォーマンスに可能な限り最高になりたいです。この種の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

このようなシンプルな構造ではなく、心配しないでください。 – martriay

+0

ありがとうございました。これを試してみましょう。 – Vinodtiru

3

がES6の非構造を使用して、最もコンパクトなフォームは次のようになり:

response.map(({CountryCode: Label, CountryName: Value}) => ({Label, Value})) 
関連する問題