Как разрушить этот вид вложенных объектов? - PullRequest
0 голосов
/ 26 октября 2019

По запросу переводчика Microsoft Azure API я получаю список языков в виде вложенных объектов. Я хотел бы восстановить только некоторые значения, такие как «код языка и имя», но я не могу деструктурировать объекты. Если у вас есть идеи, методы, чтобы посоветовать мне, я действительно заинтересован. Большое спасибо. Большое спасибо.

Я пытался уничтожить вложенные объекты, но не могу.

async getAzureLanguages() {
    const getLanguages: any = await new AzureLanguageApi().supportedLanguages();
    let provider: string = `Microsoft`;
    const languages: ILanguages[] = [{ code: ``, name: ``, providers: [``] }];
    const azureLanguageKeys: any = Object.keys(getLanguages.translation);
    const azureLanguageValues: any = Object.values(getLanguages.translation);
    azureLanguageValues.forEach((element: { code: string; name: string }) => {
                return languages.push({code: '', name: element.name, providers: [provider]})
            })
            // console.log('languages :', languages);
            return getLanguages;
}

Вот первый результат запроса API:

{"translation":{"af":{"name":"Afrikaans","nativeName":"Afrikaans","dir":"ltr"},"ar":{"name":"Arabic","nativeName":"العربية","dir":"rtl"},"bg":{"name":"Bulgarian","nativeName":"Български","dir":"ltr"},"bn":{"name":"Bangla","nativeName":"বাংলা","dir":"ltr"},"bs":{"name":"Bosnian","nativeName":"bosanski (latinica)","dir":"ltr"},"ca":{"name":"Catalan","nativeName":"Català","dir":"ltr"},"cs":{"name":"Czech","nativeName":"Čeština","dir":"ltr"},"cy":{"name":"Welsh","nativeName":"Welsh","dir":"ltr"},"da":{"name":"Danish","nativeName":"Dansk","dir":"ltr"},...

И мой фактическийрезультат:

languages : [ { code: '', name: '', providers: [ '' ] },
  { code: '', name: 'Afrikaans', providers: [ 'Microsoft' ] },
  { code: '', name: 'Arabic', providers: [ 'Microsoft' ] },
  { code: '', name: 'Bulgarian', providers: [ 'Microsoft' ] },
  { code: '', name: 'Bangla', providers: [ 'Microsoft' ] },
  { code: '', name: 'Bosnian', providers: [ 'Microsoft' ] },
  { code: '', name: 'Catalan', providers: [ 'Microsoft' ] },...
````
I expect to have this :
````
languages : [ { code: 'af', name: 'Afrikaans', providers: [ 'Microsoft' ] },
  { code: 'ar', name: 'Arabic', providers: [ 'Microsoft' ] },
  { code: 'bg', name: 'Bulgarian', providers: [ 'Microsoft' ] },
  { code: 'bn', name: 'Bangla', providers: [ 'Microsoft' ] },
  { code: 'bs', name: 'Bosnian', providers: [ 'Microsoft' ] },
  { code: 'ca', name: 'Catalan', providers: [ 'Microsoft' ] },...

1 Ответ

0 голосов
/ 26 октября 2019

Более простой способ сделать то, что вы пытаетесь сделать:

...
azureLanguageKeys.foreach(key => {
  languages.push({
    code: key, 
    name: getLanguages.translation[key].name, 
    providers: [provider]
  });
})

Или цикл for..in:

...
for(const key in getLanguages.translation){
  languages.push({
    code: key, 
    name: getLanguages.translation[key].name, 
    providers: [provider]
  });
}

Кроме того, вы инициализируете массив языковс пустым объектом. Инициализируйте это так:

const languages: ILanguages[] = [];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...