Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
193 views
in Technique[技术] by (71.8m points)

javascript - How do I merge two arrays of Objects with a shared ID in TypeScript?

I have two Arrays of Objects, that share an ID. How do I merge them into a single Array, where all items have been merged based on the ID?

I'm using TypeScript and 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",
    topics: [ "Test", "Test2" ]
  },
  {
    subject_id: "712",
    subjectName: "Maths",
    topics: [ "topic1", "Topic2" ]
  }
];
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

I think you could use something like this:

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 }
})

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...