首页 > 解决方案 > 如何解构这种嵌套对象?

问题描述

根据对 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' ] },...

标签: node.jstypescriptazureobjectnested-object

解决方案


一种更简单的方法来做你想做的事情:

...
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[] = [];

推荐阅读