Advertisement
Pijomir

class Company

Feb 7th, 2024
950
0
Never
1
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.         salary = Number(salary);
  8.         if (!name || !salary || !position || !department || salary < 0) {
  9.             throw new Error('Invalid input!');
  10.         }
  11.  
  12.         if (!this.departments[department]) {
  13.             this.departments[department] = {totalSalariesSum: 0, employees: []};
  14.         }
  15.  
  16.         this.departments[department].employees.push({name, salary, position});
  17.         this.departments[department].totalSalariesSum += salary;
  18.         return `New employee is hired. Name: ${name}. Position: ${position}`;
  19.     }
  20.  
  21.     bestDepartment() {
  22.         for (let  deptInfo of Object.values(this.departments)) {
  23.             deptInfo.totalSalariesSum = deptInfo.totalSalariesSum / deptInfo.employees.length;
  24.         }
  25.  
  26.         let bestDepartment = Object.entries(this.departments).sort((a, b) => b[1].totalSalariesSum - a[1].totalSalariesSum).shift();
  27.         let departmentPart = `Best Department is: ${bestDepartment[0]}\n`;
  28.         let averageSalaryPart = `Average salary: ${(bestDepartment[1].totalSalariesSum).toFixed(2)}\n`;
  29.         let employeesPart = bestDepartment[1].employees.sort((a, b) => b.salary - a.salary || a.name.localeCompare(b.name)).map(a => `${a.name} ${a.salary} ${a.position}`).join('\n');
  30.         return departmentPart + averageSalaryPart + employeesPart;
  31.     }
  32. }
Advertisement
Comments
Add Comment
Please, Sign In to add comment
Advertisement