【问题标题】:How to destructuring this kind of nested Objects?如何解构这种嵌套对象?
【发布时间】:2019-10-26 10:38:41
【问题描述】:

根据 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.js typescript azure object nested-object


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢 Felix,我得到了完全预期的结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-16
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 2019-08-28
    相关资源
    最近更新 更多