Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Company {
- constructor() {
- this.departments = [];
- }
- addEmployee(...args) {
- const [username, salary, position, department] = args;
- const isInvalidInput = args.some((empl) => empl === null || empl === undefined || empl === '') || salary < 0;
- if (isInvalidInput) {
- throw new Error('Invalid input!');
- } else {
- const newEmployee = {
- username,
- salary,
- position,
- department,
- };
- if (this.departments.filter((e) => e.name === department).length > 0) {
- for (const existingDepartment of this.departments) {
- if (existingDepartment.name === department) {
- existingDepartment.users.push(newEmployee);
- existingDepartment.totalSalary += salary;
- }
- }
- } else {
- const newDepartment = {
- name: department,
- users: [newEmployee],
- totalSalary: salary,
- averageSalary() {
- return this.totalSalary / this.users.length;
- },
- };
- this.departments.push(newDepartment);
- }
- return `New employee is hired. Name: ${username}. Position: ${position}`;
- }
- }
- bestDepartment() {
- const bestDepartment = this.departments.sort((a, b) => a.averageSalary - b.averageSalary)[0];
- bestDepartment.users = bestDepartment.users.sort((a, b) => {
- if (a.username === b.username) {
- return b.username - a.username;
- }
- return a.salary < b.salary ? 1 : -1;
- });
- let result = `Best Department is: ${bestDepartment.name}\nAverage salary: ${bestDepartment.averageSalary().toFixed(2)}`;
- for (const user of bestDepartment.users) {
- result += `\n${user.username} ${user.salary} ${user.position}`;
- }
- return result;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment