По заданию при проверке объекта на условие ( if (func(employee[name]) === false)) мне нужно вызывать функцию (lieToEmployer) которая меняет значения объекта employee.
Я предполагаю что проблема заключается в том что данные в объекте не меняются или меняются с опозданием поэтому основная функция hireNewEmployee работает еще со старыми данными объекта employee и выводит некорректный результат опираясь на старые значения объекта employee.
const filters = {
age: function (a) {
return a >= 25;
},
education: function (a) {
return a === 'higher';
},
experience: function (a) {
return 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) {
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));