Advertisement
AhmetUstun

06. Company

Jul 1st, 2021
315
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 bestDepartment = Object
  45.             .entries(this.aveSalaries)
  46.             .sort((a, b) => b[1].averageSalary - a[1].averageSalary)
  47.             .shift();
  48.  
  49.         console.log(`Best Department is: ${bestDepartment[0]}`);
  50.         console.log(`Average salary: ${bestDepartment[1].averageSalary.toFixed(2)}`);
  51.  
  52.         this.departments[bestDepartment[0]]
  53.             .sort((a, b) => b.salary - a.salary || a.username.localeCompare(b.username));
  54.  
  55.         this.departments[bestDepartment[0]].forEach(user => {
  56.             console.log(`${user.username} ${user.salary} ${user.position}`);
  57.         });
  58.     }
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement