Advertisement
Guest User

Untitled

a guest
Jul 1st, 2021
653
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. class Company {
  2.  
  3.     constructor() {
  4.         this.departments = {};
  5.         this.aveSalaries = {};
  6.     }
  7.  
  8.     addEmployee(username, salary, position, department) {
  9.  
  10.         if ([...arguments].some(a => a === null || a === undefined || a === '') || salary < 0) {
  11.             throw new Error('Invalid input!');
  12.         }
  13.  
  14.         let user = {
  15.             username: username,
  16.             salary: salary,
  17.             position: position
  18.         };
  19.  
  20.         if (!this.departments.hasOwnProperty(department)) {
  21.  
  22.             this.departments[department] = [];
  23.  
  24.             this.aveSalaries[department] = {
  25.                 totalEmployees: 0,
  26.                 totalSalaries: 0,
  27.                 averageSalary: 0
  28.             };
  29.         }
  30.  
  31.         this.departments[department].push(user);
  32.         this.aveSalaries[department].totalEmployees += 1;
  33.         this.aveSalaries[department].totalSalaries += salary;
  34.        
  35.         this.aveSalaries[department].averageSalary =
  36.             this.aveSalaries[department].totalSalaries /
  37.             this.aveSalaries[department].totalEmployees;
  38.        
  39.         return `New employee is hired. Name: ${username}. Position: ${position}`;
  40.     }
  41.  
  42.     bestDepartment() {
  43.  
  44.         let result = '';
  45.         let bestDepartment = Object
  46.             .entries(this.aveSalaries)
  47.             .sort((a, b) => b[1].averageSalary - a[1].averageSalary)
  48.             .shift();
  49.  
  50.         result += `Best Department is: ${bestDepartment[0]}`;
  51.         result += `\nAverage salary: ${bestDepartment[1].averageSalary.toFixed(2)}`;
  52.  
  53.         this.departments[bestDepartment[0]]
  54.             .sort((a, b) => b.salary - a.salary || a.username.localeCompare(b.username));
  55.  
  56.         this.departments[bestDepartment[0]].forEach(user => {
  57.             result +=`\n${user.username} ${user.salary} ${user.position}`;
  58.         });
  59.  
  60.         return result;
  61.     }
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement