Advertisement
divanov94

Untitled

Oct 9th, 2020
63
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(username, salary, position, department) {
  7.         for (let arg of [username, salary, position, department]) {
  8.             this.validate(arg);
  9.         }
  10.  
  11.         if (!this.departments[department]) {
  12.             this.departments[department] = [];
  13.         }
  14.  
  15.         this.departments[department].push({ username, salary, position });
  16.  
  17.         return `New employee is hired. Name: ${username}. Position: ${position}`;
  18.     }
  19.  
  20.     bestDepartment() {
  21.         //department - avg salary
  22.         let departments = {};
  23.         Object.entries(this.departments).forEach(([department, employees]) => {
  24.             let totalSalary = employees
  25.                 .map((e) => e.salary)
  26.                 .reduce((acc, curr) => (acc += curr));
  27.  
  28.             departments[department] = totalSalary / employees.length;
  29.         });
  30.  
  31.         let maxSalary = 0;
  32.         let bestDepartment;
  33.         Object.entries(departments).forEach(([department, avgSalary]) => {
  34.             if (avgSalary > maxSalary) {
  35.                 maxSalary = avgSalary;
  36.                 bestDepartment = department;
  37.             }
  38.         });
  39.  
  40.         let output = `Best Department is: ${bestDepartment}\nAverage salary: ${departments[
  41.             bestDepartment
  42.             ].toFixed(2)}\n`;
  43.  
  44.         this.departments[bestDepartment]
  45.             .sort(
  46.                 (a, b) => b.salary - a.salary || a.username.localeCompare(b.username)
  47.             )
  48.             .forEach((e) => {
  49.                 output += `${e.username} ${e.salary} ${e.position}\n`;
  50.             });
  51.  
  52.         return output.trim();
  53.     }
  54.  
  55.     validate(value) {
  56.         if (!value || value < 0) {
  57.             throw new Error("Invalid input!");
  58.         }
  59.     }
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement