Skip to content

Commit 425263e

Browse files
author
Vlada B
committed
finish 2nd prep-exercise
1 parent cc45e8f commit 425263e

1 file changed

Lines changed: 45 additions & 7 deletions

File tree

Week3/prep-exercises/1-hyf-program/2-class-list.js

Lines changed: 45 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,42 @@ import { modules, students, mentors, classes } from "./hyf.js";
1111
*
1212
* [{ name: 'John', role: 'student' }, { name: 'Mary', role: 'mentor' }]
1313
*/
14+
1415
const getPeopleOfClass = (className) => {
15-
// TODO complete this function
16-
};
17-
// You can uncomment out this line to try your function
18-
// console.log(getPeopleOfClass('class34'));
16+
17+
function filterByProperty (people, property, value) {
18+
return people.filter((person) => {
19+
const prop = person[property];
20+
if (Array.isArray(prop)) {
21+
return prop.includes(value);
22+
} else {
23+
return prop === value;
24+
}
25+
});
26+
}
27+
28+
function getPeopleInfo(people, role) {
29+
return people.map((person) => ({ name: person.name, role: role}));
30+
}
31+
32+
const classStudents = filterByProperty(students, 'class', className);
33+
const classStudentsInfo = getPeopleInfo(classStudents, 'student')
34+
35+
const currentClass = classes.find(curClass => curClass.name === className);
36+
if (!currentClass) {
37+
console.error(`There is no ${currentClass} in the list`);
38+
return [];
39+
}
40+
41+
const currentModuleOfClass = currentClass.currentModule;
42+
43+
const currentMentor = filterByProperty(mentors, 'nowTeaching', currentModuleOfClass);
44+
const currentMentorInfo = getPeopleInfo(currentMentor, 'mentor');
45+
46+
return classStudentsInfo.concat(currentMentorInfo);
47+
}
48+
49+
console.log(getPeopleOfClass('class34'));
1950

2051
/**
2152
* We would like to have a complete overview of the current active classes.
@@ -29,8 +60,15 @@ const getPeopleOfClass = (className) => {
2960
* class35: [{ name: 'Jane', role: 'student' }, { name: 'Steve', role: 'mentor' }]
3061
* }
3162
*/
63+
3264
const getActiveClasses = () => {
33-
// TODO complete this function
65+
return classes
66+
.filter((activeClass) =>
67+
activeClass.active === true)
68+
.reduce((result, curClass) => {
69+
result[curClass.name] = getPeopleOfClass(curClass.name);
70+
return result;
71+
}, {});
3472
};
35-
// You can uncomment out this line to try your function
36-
// console.log(getActiveClasses());
73+
74+
console.log(getActiveClasses());

0 commit comments

Comments
 (0)