Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* There are two types of data entries: Students and Trainers.
- Each entry has id, first name, last name, town and role (student or trainer).
- The trainers have set of courses and lectures per day.
- The students have set of grades, level and certificate (true / false).
- Your task is to sort the data according to the input conditions and print it to the console.
- If the students criteria is to sort them by name, you should sort them by first name and as second condition by
- last name. If the student`s criteria is to sort them by level, you should sort them by level and
- as second condition by id.
- The trainers should be sorted by the quantity of their courses and as second condition by lectures per day.
- The first line of the input will be the sorting condition (students^trainers) in the format
- [name/level]^[courses].
- The rest lines of the input will be data you should sort in JSON format.
- The output should be in the format:
- {students: [{ first name, last name, average grade, certificate }, β¦ ],
- trainers: [ { id, first name, last name, courses, lectures per day}, β¦ ]}. */
- "use strict";
- function studentsAndTrainersInfoSorter(args) {
- var criteriesBySort = args[0].split('^').filter(Boolean);
- var moduleObj = {'students': [], 'trainers': []};
- for (var i = 1; i < args.length; i += 1) {
- getDataFromRowAndPutIntoObject(moduleObj, JSON.parse(args[i]));
- }
- sortingStudents(moduleObj.students, criteriesBySort[0]);
- sortingTrainers(moduleObj.trainers);
- console.log(JSON.stringify(moduleObj));
- function getDataFromRowAndPutIntoObject(object, inputObj) {
- var currentObj = {
- 'id': inputObj['id'],
- 'firstname': inputObj['firstname'],
- 'lastname': inputObj['lastname']
- };
- if (inputObj['role'] == 'student') {
- currentObj['averageGrade'] = calculateAverageGrade(inputObj['grades']);
- currentObj['certificate'] = inputObj['certificate'];
- currentObj['level'] = inputObj['level'];
- object.students.push(currentObj);
- } else {
- currentObj['courses'] = inputObj['courses'];
- currentObj['lecturesPerDay'] = inputObj['lecturesPerDay'];
- object.trainers.push(currentObj);
- }
- }
- function calculateAverageGrade(gradesArr) {
- if (gradesArr.length) {
- var sum = 0;
- gradesArr.forEach(function (num) {
- sum += parseFloat(num);
- });
- return (sum / gradesArr.length).toFixed(2);
- }
- }
- function sortingStudents(studentsArr, criteriaBySort) {
- if (studentsArr.length > 1) {
- if (criteriaBySort == 'level') {
- studentsArr.sort(function (obj1, obj2) {
- return (obj1.level != obj2.level) ? (obj1.level - obj2.level) :
- (obj1.id - obj2.id);
- });
- } else {
- studentsArr.sort(function (obj1, obj2) {
- return (obj1.firstname == obj2.firstname) ? (obj1.lastname.localeCompare(obj2.lastname)) :
- (obj1.firstname.localeCompare(obj2.firstname));
- });
- }
- }
- studentsArr.forEach(function (obj) {
- delete obj.level;
- });
- }
- function sortingTrainers(trainersArr) {
- if (trainersArr.length > 1) {
- trainersArr.sort(function (obj1, obj2) {
- return (obj1.courses.length != obj2.courses.length) ? (obj1.courses.length - obj2.courses.length) :
- (obj1.lecturesPerDay - obj2.lecturesPerDay);
- });
- }
- }
- }
- studentsAndTrainersInfoSorter([
- 'level^courses',
- '{"id":0,"firstname":"Angel","lastname":"Ivanov","town":"Plovdiv","role":"student",' +
- '"grades":["5.89"],"level":2,"certificate":false}',
- '{"id":1,"firstname":"Mitko","lastname":"Nakova","town":"Dimitrovgrad","role":"trainer",' +
- '"courses":["PHP","Unity Basics"],"lecturesPerDay":6}',
- '{"id":2,"firstname":"Bobi","lastname":"Georgiev","town":"Varna","role":"student",' +
- '"grades":["5.59","3.50","4.54","5.05","3.45"],"level":4,"certificate":false}',
- '{"id":3,"firstname":"Ivan","lastname":"Ivanova","town":"Vidin","role":"trainer",' +
- '"courses":["JS","Java","JS OOP","Database","OOP","C#"],"lecturesPerDay":7}',
- '{"id":4,"firstname":"Mitko","lastname":"Petrova","town":"Sofia","role":"trainer",' +
- '"courses":["Database","JS Apps","Java"],"lecturesPerDay":2}'
- ]);
- studentsAndTrainersInfoSorter([
- 'name^courses',
- '{"id":0,"firstname":"Angel","lastname":"Ivanov","town":"Plovdiv","role":"student",' +
- '"grades":["5.89"],"level":2,"certificate":false}',
- '{"id":1,"firstname":"Mitko","lastname":"Nakova","town":"Dimitrovgrad","role":"trainer",' +
- '"courses":["PHP","Unity Basics"],"lecturesPerDay":6}',
- '{"id":2,"firstname":"Angel","lastname":"Georgiev","town":"Varna","role":"student",' +
- '"grades":["5.59","3.50","4.54","5.05","3.45"],"level":4,"certificate":false}',
- '{"id":3,"firstname":"Ivan","lastname":"Ivanova","town":"Vidin","role":"trainer",' +
- '"courses":["JS","Java","JS OOP","Database","OOP","C#"],"lecturesPerDay":7}',
- '{"id":4,"firstname":"Mitko","lastname":"Petrova","town":"Sofia","role":"trainer",' +
- '"courses":["Database","JS Apps"],"lecturesPerDay":2}'
- ]);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement