У меня есть две функции, которые я хочу написать.
Первая функция требует двух параметров.Первый параметр - это дата, а второй - форматер даты.Примерно так:
/*
Definition of date formats below:
LTS : 'h:mm:ss A',
LT : 'h:mm A',
L : 'MM/DD/YYYY',
LL : 'MMMM D, YYYY',
LLL : 'MMMM D, YYYY h:mm A',
LLLL : 'dddd, MMMM D, YYYY h:mm A'
Pass these into the second parameter of the formatDate function to return the expected date format
*/
export const formatDate = (date = moment(), F = "L") => moment(date).format(F); // F means format refer to the comment above before the function L is the default argument
Вторая функция также требует двух параметров.Первый параметр - это дата, а второй - количество месяцев, добавляемых в дату.Примерно так:
export const addMonth = (date = moment(), amount) => moment(date).add(amount, 'months');
.
Теперь, когда я тестирую эти две функции вместе, используя jest .
expect(
Util.formatDate(
Util.addMonth(
new Date('December 17, 1995 03:24:00'), 1,
),
),
).toEqual("01/17/1996");
Теперь тестcase прошел, поэтому все, кажется, работает нормально.
Теперь я хочу использовать функцию compose , которая создает вызовы функции, принимает аргумент и передает основной аргумент для возврата окончательного результата.
Я нашел эту ссылку , которая мне в этом помогает.
и придумал следующий код:
const compose = (...functions) => args => functions.reduceRight((arg, fn) => fn(arg), args);
// Actual test case below:
expect(
compose(
Util.formatDate,
Util.addMonth,
)(new Date('February 28, 2018 03:24:00')),
).toEqual("03/28/2018");
Как мне пройти каждый обязательные аргументы в этих вызовах функций внутри функции compose.Пример примерно так:
expect(
compose(
(Util.formatDate, "L"),
(Util.addMonth, 1),
)(new Date('February 28, 2018 03:24:00')),
).toEqual("03/28/2018");
Если есть лучшая реализация для этого, вы можете сказать мне.Нужно ли использовать какую-то библиотеку для достижения этой цели?
Благодарим вас за помощь. Заранее спасибо.