如何在TypeScript中合并具有共享ID的两个对象数组?

问题描述

我有两个共享ID的对象数组。如何将它们合并到单个阵列中,其中所有项目都已根据ID进行了合并?

我正在使用TypeScript和Angular。

const array0 = [
  {
    subject_id: "711",topics: [ "Test","Test2" ]
  },{
    subject_id: "712",topics: [ "topic1","Topic2" ]
  }
];

const array1 = [
  {
    subject_id: 711,subject_name: "Science"
  },{
    subject_id: 712,subject_name: "Maths"
  }
];

I want the merged result to be:

const result = [
  {
    subject_id: "711",subjectName: "Science",subjectName: "Maths","Topic2" ]
  }
];

解决方法

我认为您可以使用类似这样的东西:

selectedSubjects = [
                     { subject_id: 711,topics: ["Test","Test2"] },{ subject_id: 712,topics: ["topic1","Topic2"] }
                   ]

theOtherSubjects = [
                     {subject_id: 711,subject_name: "Science"},{subject_id: 712,subject_name: "Maths"}
                   ] // fixed the ids as I supposed the should be the same,otherwise it makes no sense with the provided data

let mergedSubjects = selectedSubjects.map(subject => {
    let otherSubject = theOtherSubjecs.find(element => element.subject_id === subject.subject_id)
    return { ...subject,...otherSubject }
})
,

一种方法:

selectedSubjects = [
    { subject_id: "711",{ subject_id: "712","Topic2"] }
  ];
  anotherArray = [
    { subject_id: 711,subject_name: "Science" },subject_name: "Maths" }
  ];

  finalArray = [];

  createFinalArray() {
    this.selectedSubjects.map(s1 => {
      this.finalArray.push({
        subject_id: s1.subject_id,subject_name: this.anotherArray.find(s2 => s2.subject_id.toString()===s1.subject_id).subject_id,topics: s1.topics
      });
    })
  }