Arrays angular 6中的json嵌套结构

Arrays angular 6中的json嵌套结构,arrays,json,angular,typescript,Arrays,Json,Angular,Typescript,我是个新手。我需要将数据发送到后端系统。对象的结构如下所示 interface semester { Id: number; Semester: string; Year: number; course: course[]; } interface course { CourseNumber: number; CourseTitle: string; CurriculumID: string; } 我的用户界面会在每次按下add按钮并尝试开发一个对象时添加一个课程

我是个新手。我需要将数据发送到后端系统。对象的结构如下所示

interface semester {
  Id: number;
  Semester: string;
  Year: number;
  course: course[];
}

interface course {
  CourseNumber: number;
  CourseTitle: string;
  CurriculumID: string;
}
我的用户界面会在每次按下add按钮并尝试开发一个对象时添加一个课程,如下所示,并将其发送到后端api

添加第一个课程:

[  
   {  
      "Id":"20193",
      "Semester":"Fall",
      "Year":"2018",
      "course":[  
         {  
            "CourseNumber":"100",
            "CourseTitle":"CEU: Contemporary Collective Bargaining",
            "CurriculumID":"00004285"
         }
      ]
   }
]
当在不同的学期增加一门课程时

[  
   {  
      "Id":"20193",
      "Semester":"Fall",
      "Year":"2018",
      "course":[  
         {  
            "CourseNumber":"100",
            "CourseTitle":"CEU: Contemporary Collective Bargaining",
            "CurriculumID":"00004285"
         }
      ]
   },
   {  
      "Id":"20195",
      "Semester":"Spring",
      "Year":"2019",
      "course":[  
         {  
            "CourseNumber":"230",
            "CourseTitle":"American Indians of Minnesota",
            "CurriculumID":"00007541"
         }
      ]
   }
]
第三次在上学期增加一门课程时,结构应如下所示

[  
   {  
      "Id":"20193",
      "Semester":"Fall",
      "Year":"2018",
      "course":[  
         {  
            "CourseNumber":"100",
            "CourseTitle":"CEU: Contemporary Collective Bargaining",
            "CurriculumID":"00004285"
         },
         {  
            "CourseNumber":"101",
            "CourseTitle":"Design Foundations",
            "CurriculumID":"00000897"
         }
      ]
   },
   {  
      "Id":"20195",
      "Semester":"Spring",
      "Year":"2019",
      "course":[  
         {  
            "CourseNumber":"230",
            "CourseTitle":"American Indians of Minnesota",
            "CurriculumID":"00007541"
         }
      ]
   }
]
单击按钮后从表单捕获的结果

this.selectedSemester={Id: "20193", Semester: "Fall ", Year: "2018"};
this.selectedCourse={CourseNumber:"240",CourseTitle:"Painting",CurriculumID:"00001025"}
并编写了一个addCourse方法,以所需格式捕获数据

courseList: semester[];
addCourse(){
  this.courseList.push({
  Id: this.selectedSemester.Id,
  Semester: this.selectedSemester.Semester,
  Year: this.selectedSemester.Year,
  course: this.selectedCourse
        }
      );
    }

在本学期中,Id是唯一的键Id。有人能帮助你用语法来形成这个对象吗。

你可以用这种方式来组装你的对象

你有你的接口

export interface ISemester {
    Id: number;
    Semester: string;
    Year: number;
    course: ICourse[];
}

export interface ICourse {
    CourseNumber: number;
    CourseTitle: string;
    CurriculumID: string;
}
您拥有实现接口的模型

export class Semester implements ISemester {
    Id: number;
    Semester: string;
    Year: number;
    course: ICourse[];
}

export class Course implements ICourse {
    CourseNumber: number;
    CourseTitle: string;
    CurriculumID: string;
}
您有一个ISemester类型的列表,可以在其中推入对象。本学期对象将获取课程对象,您将其推送到课程列表中

const semesters: Array<ISemester> = [];

const semester1 = new Semester();
semester1.Id = 1000;
semester1.Semester = 'Semester1';
semester1.Year = 2018;

const course1 = new Course();
course1.CourseNumber = 1;
course1.CourseTitle = 'Title1';
course1.CurriculumID = '00123';

semester1.course.push(course1);

const course2 = new Course();
course1.CourseNumber = 5;
course1.CourseTitle = 'Title2';
course1.CurriculumID = '00124';

semester1.course.push(course2);

semesters.push(semester1);

const semester2 = new Semester();
semester1.Id = 1001;
semester1.Semester = 'Semester2';
semester1.Year = 2019;

const course3 = new Course();
course1.CourseNumber = 101;
course1.CourseTitle = 'Title4';
course1.CurriculumID = '00800';

semester1.course.push(course3);

semesters.push(semester2);
const学期:数组=[];
const semester1=新学期();
semester1.Id=1000;
学期='semester1';
学期1年=2018年;
const course1=新课程();
course1.CourseNumber=1;
course1.CourseTitle='Title1';
course1.coursumid='00123';
学期1.课程1.推送(课程1);
const course2=新课程();
course1.CourseNumber=5;
course1.CourseTitle='Title2';
course1.coursumid='00124';
学期1。课程。推(课程2);
学期。推送(学期1);
const semester2=新学期();
semeste1.Id=1001;
学期1。学期=‘学期2’;
学期1。年份=2019年;
const course3=新课程();
course1.CourseNumber=101;
course1.CourseTitle='Title4';
course1.coursumid='00800';
学期1。课程。推(课程3);
学期。推送(学期2);

这将产生包含一门或n门课程的学期列表。

您可以通过这种方式组合对象

你有你的接口

export interface ISemester {
    Id: number;
    Semester: string;
    Year: number;
    course: ICourse[];
}

export interface ICourse {
    CourseNumber: number;
    CourseTitle: string;
    CurriculumID: string;
}
您拥有实现接口的模型

export class Semester implements ISemester {
    Id: number;
    Semester: string;
    Year: number;
    course: ICourse[];
}

export class Course implements ICourse {
    CourseNumber: number;
    CourseTitle: string;
    CurriculumID: string;
}
您有一个ISemester类型的列表,可以在其中推入对象。本学期对象将获取课程对象,您将其推送到课程列表中

const semesters: Array<ISemester> = [];

const semester1 = new Semester();
semester1.Id = 1000;
semester1.Semester = 'Semester1';
semester1.Year = 2018;

const course1 = new Course();
course1.CourseNumber = 1;
course1.CourseTitle = 'Title1';
course1.CurriculumID = '00123';

semester1.course.push(course1);

const course2 = new Course();
course1.CourseNumber = 5;
course1.CourseTitle = 'Title2';
course1.CurriculumID = '00124';

semester1.course.push(course2);

semesters.push(semester1);

const semester2 = new Semester();
semester1.Id = 1001;
semester1.Semester = 'Semester2';
semester1.Year = 2019;

const course3 = new Course();
course1.CourseNumber = 101;
course1.CourseTitle = 'Title4';
course1.CurriculumID = '00800';

semester1.course.push(course3);

semesters.push(semester2);
const学期:数组=[];
const semester1=新学期();
semester1.Id=1000;
学期='semester1';
学期1年=2018年;
const course1=新课程();
course1.CourseNumber=1;
course1.CourseTitle='Title1';
course1.coursumid='00123';
学期1.课程1.推送(课程1);
const course2=新课程();
course1.CourseNumber=5;
course1.CourseTitle='Title2';
course1.coursumid='00124';
学期1。课程。推(课程2);
学期。推送(学期1);
const semester2=新学期();
semeste1.Id=1001;
学期1。学期=‘学期2’;
学期1。年份=2019年;
const course3=新课程();
course1.CourseNumber=101;
course1.CourseTitle='Title4';
course1.coursumid='00800';
学期1。课程。推(课程3);
学期。推送(学期2);

这将产生包含一门或n门课程的学期列表。

下面是一个示例,说明如何根据更新的信息处理对象:

courseList: Array<ISemester> = [];

addCourse(){
    this.selectedSemester={Id: "20193", Semester: "Fall ", Year: "2018", course: []};
    this.selectedCourse={CourseNumber:"240",CourseTitle:"Painting",CurriculumID:"00001025"}

    // Add the semester and get the reference to it
    const currentSemester = this.addSemester(this.selectedSemester);

    // Add the selected course to the referenced semester in the courseList
    this._addCourse(this.selectedCourse, currentSemester);
}

/**
 * This method first checks whether the semester is already listed.
 * If not, the semester will be added.
 * The method finally returns the reference to the semester object in the list.
 */
private addSemester(semester: ISemester): ISemester {
    let isInList: boolean = false;
    let currentSemester: ISemester;

    // walk through the semester list
    this.courseList.forEach(element => {
        // if the semester is already listed
        if(element.Id === semester.Id){
            // memorize this and let the return value (currentSemester) 
            // be a reference to the semester element in the list
            isInList = true;
            currentSemester = element;

            // stop iteration
            break;
        }
    });

    // if there was no match, add the semester to the courseList
    if(!isInList) {
       currentSemester = semester;
       this.courseList.push(semester);
    }

    return currentSemester;
}

private _addCourse(course: ICourse, semester: ISemester) {
    // if the course is not yet listed
    if(this.semester.course.filter(element => element.Id === course.Id).length < 0){
        // add it
        this.semester.course.push(course);
    }
}
courseList:Array=[];
addCourse(){
this.selectedSerm={Id:“20193”,Serm:“秋季”,Year:“2018”,课程:[]};
this.selectedCourse={CourseNumber:“240”,CourseTile:“绘画”,CourseId:“00001025”}
//添加学期,并获取该学期的参考资料
const currentSerm=this.addSerm(this.selectedSerm);
//将所选课程添加到课程列表中的参考学期
本课程(本课程,当前学期);
}
/**
*此方法首先检查学期是否已列出。
*如果没有,将增加学期。
*该方法最终返回对列表中Serm对象的引用。
*/
私人学期(学期:iMester):iMester{
设isInList:boolean=false;
当前学期:iMester;
//浏览学期清单
this.courseList.forEach(元素=>{
//如果学期已经列出
if(element.Id==sement.Id){
//记住这一点,并让返回值(CurrentSerm)
//作为列表中学期元素的引用
isInList=真;
当前学期=元素;
//停止迭代
打破
}
});
//如果没有匹配项,则将该学期添加到课程列表中
如果(!isInList){
当前学期=学期;
本.课程表.推送(学期);
}
返回当前学期;
}
私人课程(课程:ICourse,学期:iMester){
//如果课程尚未列出
if(this.sement.course.filter(element=>element.Id==course.Id).length<0){
//加上
本.学期.课程.推(课程);
}
}

以下是一个示例,说明如何根据更新的信息处理对象:

courseList: Array<ISemester> = [];

addCourse(){
    this.selectedSemester={Id: "20193", Semester: "Fall ", Year: "2018", course: []};
    this.selectedCourse={CourseNumber:"240",CourseTitle:"Painting",CurriculumID:"00001025"}

    // Add the semester and get the reference to it
    const currentSemester = this.addSemester(this.selectedSemester);

    // Add the selected course to the referenced semester in the courseList
    this._addCourse(this.selectedCourse, currentSemester);
}

/**
 * This method first checks whether the semester is already listed.
 * If not, the semester will be added.
 * The method finally returns the reference to the semester object in the list.
 */
private addSemester(semester: ISemester): ISemester {
    let isInList: boolean = false;
    let currentSemester: ISemester;

    // walk through the semester list
    this.courseList.forEach(element => {
        // if the semester is already listed
        if(element.Id === semester.Id){
            // memorize this and let the return value (currentSemester) 
            // be a reference to the semester element in the list
            isInList = true;
            currentSemester = element;

            // stop iteration
            break;
        }
    });

    // if there was no match, add the semester to the courseList
    if(!isInList) {
       currentSemester = semester;
       this.courseList.push(semester);
    }

    return currentSemester;
}

private _addCourse(course: ICourse, semester: ISemester) {
    // if the course is not yet listed
    if(this.semester.course.filter(element => element.Id === course.Id).length < 0){
        // add it
        this.semester.course.push(course);
    }
}
courseList:Array=[];
addCourse(){
this.selectedSerm={Id:“20193”,Serm:“秋季”,Year:“2018”,课程:[]};
this.selectedCourse={CourseNumber:“240”,CourseTile:“绘画”,CourseId:“00001025”}
//添加学期,并获取该学期的参考资料
const currentSerm=this.addSerm(this.selectedSerm);
//将所选课程添加到课程列表中的参考学期
本课程(本课程,当前学期);
}
/**
*此方法首先检查学期是否已列出。
*如果没有,将增加学期。
*该方法最终返回对列表中Serm对象的引用。
*/
私人学期(学期:iMester):iMester{
设isInList:boolean=false;
当前学期:iMester;
//浏览学期清单
this.courseList.forEach(元素=>{
//如果学期已经列出
if(element.Id==sement.Id){
//记住这一点,并让返回值(CurrentSerm)
//作为学期ele的参考