javascript - 如何在foreach中初始化对象以推送元素
问题描述
我正在尝试构建这个 JSON:
{
"id": 20,
"professions":
[
{
"id_profession": 3853
},
{
"id_profession": 3854
}
]
}
我的功能是下一个:
submitRegistration(value: Object): void {
let nameGroup = value['name'];
let type = value['type'];
let sectorTemp: Sector = value['sectors'];
let listProfessions: ProfessionGroup[];
let addProfessions: AddProfesions;
(value['professions']).forEach(i=>{
console.log(i.id);
let oneProffesion:ProfessionGroup;
oneProffesion.id_profession=i.id;
listProfessions.push(oneProffesion);
})
console.log(listProfessions.length);
}
value['professions']
返回一个对象列表,我只需要获取 id 。
问题是它总是返回:
无法设置'id_profession'
的属性undefined
在 foreach 循环中,我不知道为什么,我尝试用 null 对其进行初始化,但不起作用。
我的界面是:
export interface Profession {
id: number;
name: string;
}
export interface ProfessionGroup {
id_profession: number;
}
export interface AddProfesions{
id:number;
professions:ProfessionGroup[];
}
解决方案
这是因为在 TypeScript 中声明变量并没有真正创建它。
例如:
let variable: string;
在这个例子中,variable
containsundefined
因为这一行只是用来指定 的类型variable
,但这一行不会包含在生成的 JavaScript 中。然而,
let variable: string = null;
使用其中的值创建变量null
。在您的情况下,您必须将oneProffesion
变量声明为空对象,然后分配其属性或结合声明和初始化:
let oneProffesion: ProfessionGroup = {
id_profession: i.id
};
这同样适用于您的阵列。你应该像这样声明它:
let listProfessions: ProfessionGroup[] = [];
否则,调用listProfessions
是否会导致错误。undefined
push
undefined
推荐阅读
- lua - 迭代时更新表值
- c# - 为什么这条线分支好像布尔条件解析为真?
- kotlin - Kotlin fun 参数传递给另一个函数,然后返回
- android - 如何为多个函数调用返回相同的运行 observable?
- python - 系统地重新布线功能
- sql - SSDT 项目部署后问题,当使用 Merge 和“WHEN NOT MATCHED By SOURCE THEN DELETE”播种具有外键约束的表时
- c - Atmel studio 位置无关代码生成不需要的代码
- gcc - fltk 在 Ubuntu 上出错。bits/statx-generic.h:没有这样的文件或目录
- eslint - Github 操作抛出 eslint 错误但在本地构建成功
- linux - openssl 在使用 TLS 1.2 或更低版本时卡住