我有我要传递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“]}]
答案 0 :(得分:1)
没有一个简单的例子,我不确定您的数据是什么样子,但是根据描述,类似的东西应该可以工作。
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"
},
{
class_id: 1872,
subject_id: 551,
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
,因此可以将其删除。