Ревью кода, сократить код
Этот кусок кода выглядит страшно
let url = `${API_URL}api/tasks?startDate=${startDate}&endDate=${endDate}`
if(!arrayIsEmpty(priorities)) {
url = `${API_URL}api/tasks?startDate=${startDate}&endDate=${endDate}&priorities=${JSON.stringify(priorities)}`
}
if(!arrayIsEmpty(statuses)) {
url = `${API_URL}api/tasks?startDate=${startDate}&endDate=${endDate}&statuses=${JSON.stringify(statuses)}`
}
if(!arrayIsEmpty(priorities) && !arrayIsEmpty(statuses)) {
url = `${API_URL}api/tasks?startDate=${startDate}&endDate=${endDate}&priorities=${JSON.stringify(priorities)}&statuses=${JSON.stringify(statuses)}`
}
Можно ли как то сократить данный фрагмент?
Ответы (1 шт):
Автор решения: Вадим Александру
→ Ссылка
Думаю плодить по одному ifу каждый раз когда добавляется новый GET параметр, - плохая идея. Есть смысл собрать их в один объект
const searchParameters = {
startDate: startDate,
endDate: endDate,
priorities: priorities,
statuses: statuses
}
Чтобы вручную не билдить url можно использовать стандартный класс URL, далее циклом проходимся по всем свойствам объекта searchParameters, делаем необходимые проверки на пустоту на тип итд и добавляем их в параметры объекта URL
url = new URL(`${API_URL}api/tasks`);
for (const [key, value] of Object.entries(searchParameters)) {
if(Array.isArray(value) || Object.is(value)) {
if(! arrayIsEmpty(value)) {
url.searchParams.append(key, JSON.stringify(value))
}
} else if(value !== undefined && value !== null) {
url.searchParams.append(key, value)
}
}
таким образом при добавлении еще одного параметра поиска не нужно менять логику билда, достаточно добавить еще одно свойство в searchParameters
Вот собственно весь код (Написан чисто для наглядности алгоритма, прошу жеесников не бить :D)
const searchParameters = {
startDate: startDate,
endDate: endDate,
priorities: priorities,
statuses: statuses
},
url = new URL(`${API_URL}api/tasks`);
for (const [key, value] of Object.entries(searchParameters)) {
if(Array.isArray(value) || Object.is(value)) {
if(! arrayIsEmpty(value)) {
url.searchParams.append(key, JSON.stringify(value))
}
} else if(value !== undefined && value !== null) {
url.searchParams.append(key, value)
}
}
console.log(url.href)