如何解决根据常见ID合并两个数组
我有我要传递classid的这样的函数
selectedSubjects;
classnamewithid;
subjectNameByID;
selectClass(selectedClass) {
this.selectedSubjects = this.topicWithClassSubjectList.filter(
(topic) => topic.class_id === selectedClass
); // to filter out class with same id
const groups = this.selectedSubjects.reduce((acc,cur) => {
(acc[cur.subject_id] = acc[cur.subject_id] || []).push(cur.topic_name);
return acc;
},{}); // to group the array according to subject
// checkpoint#1
this.selectedSubjects = Object.keys(groups).map((key) => ({
subject_id: key,topics: groups[key],}));
}
我的班级列表数组是这样的
{class_id: 1871,class_name: "1st"},{class_id: 1872,class_name: "2nd"},
检查点#1之后的selectedSubjects的最终数组是
[{"subject_id":"551","topics":["Evolution"]},{"subject_id":"711","topics":["Vector"]}]
我想要的selectedSubjects数组中要有一个与每个subject_id相关联的subjectName。我有一个SubjectId的数组,其SubjectName为:
{class_id: 2711,subject_id: 551,subject_name: "Biology"}
我希望selectedSubjects数组看起来像这样
[{“ subject_id”:“ 551”,“ subject_name”:“生物学”,主题“:[”进化“]},{” subject_id“:” 711“,” subject_name“:”科学“,”主题“:[” Vector“]}]
解决方法
没有一个简单的例子,我不确定您的数据是什么样子,但是根据描述,类似的东西应该可以工作。
const subjectsToTopics = [{
subject_id: 551,topics: ["Evolution"]
},{
subject_id: 711,topics: ["Vector"]
}];
const classList = [{
class_id: 1871,class_name: "1st"
},{
class_id: 1872,class_name: "2nd"
},];
const topicWithClassSubjectList = [{
class_id: 1871,subject_id: 551,subject_name: "Biology"
},subject_name: "Biology"
}
];
function selectClass(selectedClass) {
const classnamewithid = classList.find(
(classes) => classes.class_id === selectedClass
); // to get the class name and class ID of selected class
if (classnamewithid === null) {
throw Error(`Class with id ${selectedClass} not found`);
}
const selectedSubjects = topicWithClassSubjectList.filter(
(topic) => topic.class_id === selectedClass
); // to filter out class with same id
return selectedSubjects.map((subject) => ({
subject_id: subject.subject_id,subject_name: subject.subject_name,topics: subjectsToTopics
.filter((entry) => entry.subject_id == subject.subject_id)
.map((entry) => entry.topics)
.flat()
}));
}
console.log(selectClass(1871));
console.log(selectClass(1872));
请注意,您不会在任何地方使用classnamewithid
,因此可以将其删除。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。