减少多个 if 语句的最佳方法是什么?

What is the best way for reducing multiple if statement?

我有一个辅助函数,可以构建具有适当查询属性的对象。我在我的承诺请求中使用这个对象作为主体。重构多个 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
        })
    }

这是一个想法,但您需要先采用您的参数:

  const query = new URLSearchParams();
  Object.keys(params).forEach(key => {
    if (params[key]) {
      query.append(key, params[key]);
    }
  });

如果 service 检查它的参数(因为它应该),您可以从 default parameters 中受益。像这样:

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.

可以玩的实例