Создайте функцию, которая принимает функцию и возвращает функцию с отметками времени - PullRequest
1 голос
/ 12 июня 2019

Создать функцию dateStamp, которая принимает функцию и возвращает функцию. Возвращенная функция примет любые аргументы, которые принимает переданная функция, и вернет объект с ключом date, значением которого является сегодняшняя дата (не считая времени), представленная в виде удобочитаемой строки (методы преобразования приведены в объекте Date) и ключ output, содержащий результат вызова переданной функции.

Мой код ниже:

const dateStamp = (inputFunc) => {

    let todayDate = new Date()
    console.log(todayDate)

    let newObj = {};

    return function (num) {
        newObj.date = todayDate;
        newObj.output = inputFunc(num);
        return newObj;
    }
}

// Uncomment these to check your work!
const stampedMultBy2 = dateStamp(n => n * 2);
    
console.log(stampedMultBy2(4)); // should log: { date: (today's date), output: 8 }
console.log(stampedMultBy2(6)); // should log: { date: (today's date), output: 12 }

Мой код не проходит две спецификации теста:

enter image description here

Мои вопросы:

  1. как извлечь метку времени из текущей даты
  2. почему последняя спецификация не работает?

Ответы [ 2 ]

0 голосов
/ 12 июня 2019

Ваша функция принимает значение num в качестве значения.Это должно принять функцию в качестве значения.Тогда ваше выходное поле newObj должно быть результатом оценки функции, переданной функции.

newObj.output = func()
0 голосов
/ 12 июня 2019

1) Для первой ошибки вы можете использовать Date.toDateString () , чтобы получить только часть даты (без времени) сегодняшней даты.

2) Вторая ошибка, на мой взгляд, связана с тем, что вы не учитываете, что возвращаемая функция может принимать несколько переменных аргументов. Чтобы решить эту проблему, вы можете объявить это как:

return function (...args) { ... };

А затем при вызове полученной функции используйте inputFunc(...args). Таким образом, вы можете перейти к следующему подходу:

const dateStamp = (inputFunc) =>
{
    let todayDate = new Date();

    return (...args) =>
    {
        return {
            date: todayDate.toDateString(),
            output: inputFunc(...args)
        }
    }
}

const stampedMultBy2 = dateStamp(n => n * 2);
console.log(stampedMultBy2(4));
console.log(stampedMultBy2(6));

const stampedMax = dateStamp((x, y) => Math.max(x, y));
console.log(stampedMax(-5, 6));
console.log(stampedMax(1, 4));
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}

Вы можете даже сократить функцию dateStamp, используя стрелку :

const dateStamp = (inputFunc) => (...args) =>
    ({date: (new Date()).toDateString(), output: inputFunc(...args)});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...