Как сделать параметры в функции JavaScript необязательными?
У меня есть REST-метод фильтра товаров(интернет-магазина) на back-end. Метод работает таким образом, что при желании ему можно передавать не все входные параметры(reuired = false). То есть можно передать только максимальную цену, без минимальной и он отработает. Соответственно, для front-end'а мне нужно составить ссылку на JavaScript, чтобы отправить запрос. Для этого мне нужно в ссылке прописать переменные, которые получаю через входные параметры функции. Как я могу составить ссылку, не используя некоторые параметры.
function createTeaCardsFilter(number = '0', sortingParams = 'NAME_INCREASE', colorId, typeId, countryId, min, max,) {
var urlFilter = new URL("http://localhost:8080/tea/filter?" + 'page=' + number + "&sortingParams=" + sortingParams + '&colorId=' + colorId + '&countryId=' + countryId + '&typeId=' + typeId + '&min=' + min + '&max' + max);
const xhrFilt = new XMLHttpRequest();
xhrFilt.open('GET', urlFilter)
xhrFilt.send()
}
Ответы (2 шт):
Можно использовать деструктуризацию.
Пример применения деструктуризации:
function foo({
a,
b,
c
}) {
console.log(arguments);
}
const settings = {
a: 'a',
c: 'abc'
}
foo(settings);
Как мы видим, в консоль выводятся только переданные параметры.
function composeURLSearchParams(o) {
return Object.keys(o).reduce((acc, key) => {
const val = o[key];
if (val !== undefined && val !== null && val !== '') {
acc.append(key, val);
}
return acc;
}, new URLSearchParams({}));
}
function createTeaCardsFilter(number = '0', sortingParams = 'NAME_INCREASE', colorId, typeId, countryId, min, max) {
const urlSearchParams = composeURLSearchParams({
number,
sortingParams,
colorId,
typeId,
countryId,
min,
max
});
const urlFilter = new URL("http://localhost:8080/tea/filter");
urlFilter.search = urlSearchParams;
console.log(urlFilter.toString());
}
// усовершенствованный вариант
function createTeaCardsFilter2(param) {
const urlSearchParams = composeURLSearchParams({
number: '0', sortingParams: 'NAME_INCREASE',
...param
});
const urlFilter = new URL("http://localhost:8080/tea/filter");
urlFilter.search = urlSearchParams;
console.log(urlFilter.toString());
}
createTeaCardsFilter();
createTeaCardsFilter2({colorId: 1});
Возможно будет удобнее заменить список аргументов функции createTeaCardsFilter на 1 аргумент и вызывать функцию так createTeaCardsFilter({colorId: 1}). В качестве примера дописал функцию createTeaCardsFilter2.