2016-08-21 4 views
0

Я создаю приложение Angular 2. Мой запрос на стороне сервера возвращает мне JSON, который будет выглядеть какИзменение 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? Невозможно ли настроить компонент пользовательского интерфейса для использования альтернативных ключей для метки и значения? – 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}))