У меня есть функция, которая получает два аргумента, которые я хочу, чтобы они были необязательными (последние два):
const renderDate = (date, locale, format) => {
if (locale === undefined) { locale = 'en' }
if (format === undefined) { format = 'D MMM' }
if (locale === 'de' && format === 'D MMM') {
const indexD = format.lastIndexOf('D')
format = `${format.slice(0, indexD + 1)}o${format.slice(indexD + 1, format.length)}`
}
moment.locale(locale)
return moment(date).format(format)
}
console.log(renderDate('2019-09-04', 'Do MMM'));
<script src="https://momentjs.com/downloads/moment.js"></script>
Я не могу сделать что-то вроде этого:
const renderDate = (date, locale = 'en', format = 'D MMM') => {
if (locale === 'de' && format === 'D MMM') {
const indexD = format.lastIndexOf('D')
format = `${format.slice(0, indexD + 1)}o${format.slice(indexD + 1, format.length)}`
}
moment.locale(locale)
return moment(date).format(format)
}
Потому что, если я вызываю метод только с одним необязательным аргументом, он можетбыть неправым:
renderDate('2019-09-04', 'Do MMM')
Теперь языковой стандарт (язык) - это неправильный формат.
Каков наилучший подход для решения этой проблемы?Должен ли я передать объект, а затем проверить наличие ключей?
Тогда я могу деструктировать, но я не уверен, что это лучший подход:
const renderDate = ({
date,
locale,
format
}) => {
if (locale === undefined) {
locale = 'en'
}
if (format === undefined) {
format = 'D MMM'
}
if (locale === 'de' && format === 'D MMM') {
const indexD = format.lastIndexOf('D')
format = `${format.slice(0, indexD + 1)}o${format.slice(indexD + 1, format.length)}`
}
moment.locale(locale)
return moment(date).format(format)
}
console.log(renderDate('2019-09-04', 'Do MMM'));
<script src="https://momentjs.com/downloads/moment.js"></script>