Почему некорректно работает код?

По заданию при проверке объекта на условие ( 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));
  • Вопрос задан
  • 149 просмотров
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Приведите точную формулировку задания насчёт "обмана". Несколько разных вариантов решения возможны..

Например, переназначить свойства в объекте: установить геттер свойства age, и возвращать всегда валидное значение.

Или в том виде как у вас, просто переназначить свойство length у массива reasons, чтобы он всегда был "пустой".
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы