首页 > 解决方案 > 如何在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[];
}

标签: javascriptangulartypescript

解决方案


这是因为在 TypeScript 中声明变量并没有真正创建它。

例如:

let variable: string;

在这个例子中,variablecontainsundefined因为这一行只是用来指定 的类型variable,但这一行不会包含在生成的 JavaScript 中。然而,

let variable: string = null;

使用其中的值创建变量null。在您的情况下,您必须将oneProffesion变量声明为空对象,然后分配其属性或结合声明和初始化:

let oneProffesion: ProfessionGroup = {
   id_profession: i.id
};

这同样适用于您的阵列。你应该像这样声明它:

let listProfessions: ProfessionGroup[] = [];

否则,调用listProfessions是否会导致错误。undefinedpushundefined


推荐阅读