Advertisement
Liliana797979

company - js advanced

Oct 17th, 2021
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. class Company {
  2.     constructor() {
  3.         this.departments = new Map();
  4.     }
  5.     addEmployee(username, salary, position, department) {
  6.  
  7.         if (!username || !salary || salary < 0 || !position || !department) {
  8.             throw new Error("Invalid input!");
  9.         }
  10.  
  11.         let newEmployee = { username, salary, position, department };
  12.  
  13.         if (this.departments.has(department)) {
  14.             this.departments.get(department).push(newEmployee);
  15.         } else {
  16.             this.departments.set(department, [newEmployee]);
  17.         }
  18.  
  19.         return `New employee is hired. Name: ${username}. Position: ${position}`;
  20.     }
  21.  
  22.     bestDepartment() {
  23.         let totalSalary = (department) => {
  24.             let totalSalary = department[1].reduce((acc, b) => { return acc += b.salary }, 0);
  25.             let averageSalary = (totalSalary / department[1].length).toFixed(2);
  26.             department.push(averageSalary);
  27.             return averageSalary;
  28.         };
  29.         let bestDepartment = [...this.departments].sort((a, b) => totalSalary(b) - totalSalary(a))[0];
  30.         let sortBySalaryAndName = bestDepartment[1].sort((a, b) => b.salary - a.salary || a.username.localeCompare(b.username));
  31.  
  32.         let result = `Best Department is: ${bestDepartment.shift()}\n`;
  33.         result += `Average salary: ${bestDepartment.pop()}\n`;
  34.         sortBySalaryAndName.forEach(e => result += `${e.username} ${e.salary} ${e.position}\n`);
  35.  
  36.         return result.trim();
  37.     }
  38. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement