refector of setEmployeeToJob

This commit is contained in:
phyzical 2022-02-13 17:57:13 +08:00
parent 3e36e6a80b
commit da955a4774

@ -174,34 +174,16 @@ export class OfficeSpace {
} }
setEmployeeToJob(job: string, amount: number): boolean { setEmployeeToJob(job: string, amount: number): boolean {
let unassignedCount = 0; let jobCount = this.employees.reduce((acc, employee) => (employee.pos === job ? acc + 1 : acc), 0);
let jobCount = 0;
for (let i = 0; i < this.employees.length; ++i) { for (const employee of this.employees) {
if (this.employees[i].pos === EmployeePositions.Unassigned) { if (jobCount == amount) return true
unassignedCount++; if (employee.pos === EmployeePositions.Unassigned && jobCount <= amount) {
} else if (this.employees[i].pos === job) { employee.pos = job;
jobCount++; jobCount++;
} } else if (employee.pos === job && jobCount >= amount) {
} employee.pos = EmployeePositions.Unassigned;
jobCount--;
if (jobCount == amount) return false;
if ((jobCount + unassignedCount) < amount) return false;
for (let i = 0; i < this.employees.length; ++i) {
if (this.employees[i].pos === EmployeePositions.Unassigned) {
if (jobCount <= amount) {
this.employees[i].pos = job;
jobCount++;
unassignedCount--;
}
if (jobCount === amount) break;
} else if (this.employees[i].pos === job) {
if (jobCount >= amount) {
this.employees[i].pos = EmployeePositions.Unassigned;
jobCount--;
unassignedCount++;
}
if (jobCount === amount) break;
} }
} }
if (jobCount !== amount) return false; if (jobCount !== amount) return false;