Advertisement
svephoto

Company [JavaScript]

Jul 1st, 2021
1,208
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.         if ([...arguments].some(a => a === null || a === undefined || a === '') || salary < 0) {
  8.             throw new Error('Invalid input!');
  9.         }
  10.  
  11.         let currentDepartment = this.departments.find(d => d.name === department);
  12.  
  13.         if (currentDepartment === undefined) {
  14.             currentDepartment = {
  15.                 name: department,
  16.                 employees: []
  17.             };
  18.  
  19.             this.departments.push(currentDepartment);
  20.         }
  21.  
  22.         currentDepartment.employees.push({
  23.             username,
  24.             salary,
  25.             position
  26.         });
  27.        
  28.         return `New employee is hired. Name: ${username}. Position: ${position}`;
  29.     }
  30.  
  31.     bestDepartment() {
  32.         const copyOfDepartments = this.departments.map(d => {
  33.             const department = Object.assign({}, d);
  34.             department.averageSalary = d.employees.reduce((previous, current) => previous + current.salary, 0) / d.employees.length;
  35.             return department;
  36.         });
  37.  
  38.         copyOfDepartments.sort((a, b) => b.averageSalary - a.averageSalary);
  39.        
  40.         const bestDepartment = copyOfDepartments[0];
  41.  
  42.         if (bestDepartment !== undefined) {
  43.             bestDepartment.employees.sort((a, b) => b.salary - a.salary || a.username.localeCompare(b.username));
  44.             const result = [`Best Department is: ${bestDepartment.name}`,
  45.                             `Average salary: ${bestDepartment.averageSalary.toFixed(2)}`,
  46.             ];
  47.  
  48.             bestDepartment.employees.forEach(employee =>
  49.                 result.push(`${employee.username} ${employee.salary} ${employee.position}`));
  50.            
  51.             return result.join('\n');
  52.         }
  53.     }
  54. }
  55.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement