【发布时间】:2019-05-24 14:25:43
【问题描述】:
尝试根据嵌套属性值过滤学生。
基本上每个学生对象都有数组类型的属性:studentSuperSubject
它又具有数组作为属性:studentSubSubjectOrSkill
subjects 是以下形式的对象数组:
{superSubject: "some super subject name", subSubject: "some sub subject name"}。
studentSubSubjectOrSkill 内的每个 subSubject 都有 studentSubSubjectScore 属性,这是我正在寻找的属性。
我想循环遍历 subjects 中每个主题的学生数组并创建和对象我然后存储到另一个数组 - grades=[]
我设法用看起来像是一串意大利面条代码的 Hugh bwl 来完成它:
for (let subject of subjects) {
var grades = [];
this.data.students.filter(student => {
let name = student.studentName;
// loop over each student > superSubject > subSubject
for (let superSubject of student.studentSuperSubject) {
if (superSubject.superSubjectName === subject.superSubject) {
superSubject.studentSubSubjectOrSkill.filter(sub => {
if (sub.subSubjectName === subject.subSubject) {
grades.push({
name: name,
pass: sub.studentSubSubjectScore > 58
});
return;
}
});
}
}
});
subject["grades"] = grades;
}
知道如何改进它以使将来使用此代码的开发人员的生活更轻松吗? 作为旁注,lodash 在这个项目中可用 谢谢。
【问题讨论】:
-
您已经在学生身上使用了
filter,我也会将它用于内部 for 循环。你可以用map替换外部的for循环
标签: javascript lodash