Grade school

This commit is contained in:
2022-11-08 10:35:45 +01:00
parent 1e9da939c0
commit f2d367cd67
13 changed files with 16369 additions and 0 deletions

View File

@@ -0,0 +1,35 @@
export class GradeSchool {
private _roster: Record<number, string[]> = {};
roster(): Record<number, string[]> {
return JSON.parse(JSON.stringify(this._roster));
}
get grades(): number[] {
return Object.keys(this._roster) as unknown as number[];
}
add(name: string, grade: number): void {
const addUniqueValue = <T extends any>(
array: T[] | undefined,
value: T
): T[] => [...new Set<T>([...(array || []), value])];
const allGrades = addUniqueValue(this.grades, grade);
this._roster = allGrades.reduce(
(newRoster, rosterGrade) => ({
...newRoster,
[rosterGrade]:
rosterGrade === grade
? addUniqueValue(newRoster[rosterGrade], name).sort()
: newRoster[rosterGrade].filter((n) => n !== name),
}),
this._roster
);
}
grade(grade: number): string[] {
return this.roster()[grade] || [];
}
}