georgiev955

06. Company

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