Advertisement
milovan7

Company / JS Advanced

May 9th, 2021
844
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.47 KB | None | 0 0
  1. class Company {
  2. constructor() {
  3. this.departments = new Map();
  4. }
  5. addEmployee(username, salary, position, department) {
  6.  
  7. if (!username || !salary || salary < 0 || !position || !department) {
  8. throw new Error("Invalid input!");
  9. }
  10.  
  11. let newEmployee = { username, salary, position, department };
  12.  
  13. if (this.departments.has(department)) {
  14. this.departments.get(department).push(newEmployee);
  15. } else {
  16. this.departments.set(department, [newEmployee]);
  17. }
  18.  
  19. return `New employee is hired. Name: ${username}. Position: ${position}`;
  20. }
  21.  
  22. bestDepartment() {
  23. let totalSalary = (department) => {
  24. let totalSalary = department[1].reduce((acc, b) => { return acc += b.salary }, 0);
  25. let averageSalary = (totalSalary / department[1].length).toFixed(2);
  26. department.push(averageSalary);
  27. return averageSalary;
  28. };
  29. let bestDepartment = [...this.departments].sort((a, b) => totalSalary(b) - totalSalary(a))[0];
  30. let sortBySalaryAndName = bestDepartment[1].sort((a, b) => b.salary - a.salary || a.username.localeCompare(b.username));
  31.  
  32. let result = `Best Department is: ${bestDepartment.shift()}\n`;
  33. result += `Average salary: ${bestDepartment.pop()}\n`;
  34. sortBySalaryAndName.forEach(e => result += `${e.username} ${e.salary} ${e.position}\n`);
  35.  
  36. return result.trim();
  37. }
  38. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement