Не корректно работает код. Вызов функции при проверке условия
Проблема заключается в том что при проверке условия в if я вызываю функцию lieToEmployer которая меняет значения объекта employee. И в итоге функция hireNewEmployee пишет что я не нанят на работу из-за возраста хотя значение возраст(>=25) позволяет принять меня на работу.
const filters = {
age: (a) => a >= 25,
education: (a) => a === 'higher',
experience:(a) => a >= 1,
};
const employee = {};
const defaultDescriptors = {
writable: true,
enumerable: true,
configurable: true
};
Object.defineProperties(employee, {
name: {
...defaultDescriptors,
value: 'Dmitriy',
writable: false
},
age: {
...defaultDescriptors,
value: 21
},
education: {
...defaultDescriptors,
value: 'middle'
},
experience: {
...defaultDescriptors,
value: 0
}
})
function hireNewEmployee (employee,filters) {
const reasons = [];
Object.entries(filters).forEach(([name,func]) => {
if (func(employee[name]) === false) {
function lieToEmployer (employee) {
return Object.defineProperties(employee, {
age: {
value: 27
},
education: {
value: 'higher'
},
experience: {
value: 7
}
});
}
lieToEmployer(employee);
reasons.push(name);
}
});
return reasons.length
? `Not hired: sorry we cannot hire you. Here is why: ${reasons.join(', ')}`
: 'You are Hired! Congrats!';
}
console.log(hireNewEmployee(employee,filters));
Источник: Stack Overflow на русском