node.js - 如何解构这种嵌套对象?
问题描述
根据对 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' ] },...
解决方案
一种更简单的方法来做你想做的事情:
...
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[] = [];
推荐阅读
- laravel - 无法在 Windows 10 上使用 Vagrant 安装 Laravel 宅基地
- r - R中矩阵对象之间的Dist函数
- javascript - 如何在使用 Sequelize 的节点中使用 sequelize.transaction 在单个 api 调用中更新两个表
- python - 估计唯一字符串的数量
- r - 如何创建一个空列
- python - 尝试在 python 中解码 utf-8 编码的 json 的问题
- c++ - 对象的大小(以字节为单位),与架构不对齐?
- python - 使用多列对 Pandas 数据框进行分组并创建分布
- c++ - C++主函数中变量的作用域是什么?
- python - 如何将条形图用作“温度计”?