Лично я думаю, что ваша оригинальная функция в порядке. Поскольку вы используете ES6, вы можете избавиться от (императивного) оператора return
:
export const isTimeStrValid = str =>
str.length >= 4 && moment(str, ['H:mm', 'HH:mm'], true).isValid();
Трудно сказать, является ли ваша «функциональная» версия приемлемой с точки зрения передового опыта, поскольку это в основном будет субъективной дискуссией.
Единственное, что я могу сказать, это то, что стиль без баллов может привести к многословности, но вы можете уменьшить это, разбив вещи на более мелкие куски:
Будет ли это читать лучше для вас, например?
const isTimeStrValid = R.both(isValidString, isValidMoment);
Где isValidString
и isValidMoment
- функции многократного использования:
const isValidString = R.compose(R.lte(4), R.length);
const toMoment = R.curry((strict, formats, datestr) => moment(datestr, formats, strict));
const isValidMoment = R.compose(R.invoker(0, 'isValid'), toMoment(true, ['H:mm', 'HH:mm']));