Каков наилучший способ сокращения множественного оператора if? - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть вспомогательная функция, которая создает объект с соответствующими свойствами запроса.Я использую этот объект как тело в моем обещании.Каков самый элегантный способ рефакторинга нескольких операторов if?Вот функция:

 getQueryParams = (query, pagination, sorting) => {
        let queryParam = {}

        if (pagination && pagination.pageNumber) {
            queryParam.page = `${pagination.pageNumber}`
        }
        if (pagination && pagination.rowsOnPage) {
            queryParam.size = `${pagination.rowsOnPage}`
        }
        if (query) {
            const updatedQuery = encodeURIComponent(query)
            queryParam.q = `${updatedQuery}`
        }
        if (sorting) {
            queryParam.sort = `${sorting.isDescending ? '-' : ''}${sorting.name}`
        }
        return service.get(`/my-url/`, queryParam).then(result => {
            return result
        })
    }

Ответы [ 2 ]

0 голосов
/ 24 сентября 2019

Если service проверяет свои параметры (как и должно быть), вы можете воспользоваться параметрами по умолчанию .Примерно так:

const getQueryParams = (
  query = '',
  pagination = {pageNumber: 0, rowsOnPage: 0},
  sorting = {isDescending: '', name: ''}
) => {
  const queryParam = {
    page: pagination.pageNumber,
    size: pagination.rowsOnPage,
    q: encodeURIComponent(query),
    sort: `${sorting.isDescending}${sorting.name}`    
  }
  return ...;
};

Живой пример для игры на jsfiddle .

0 голосов
/ 24 сентября 2019

Это идея, как это может выглядеть, но вы должны принять ваши параметры раньше:

  const query = new URLSearchParams();
  Object.keys(params).forEach(key => {
    if (params[key]) {
      query.append(key, params[key]);
    }
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...