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

Javascript 减少多重if语句的最佳方法是什么?,javascript,ecmascript-6,ecmascript-2016,Javascript,Ecmascript 6,Ecmascript 2016,我有一个helper函数,用于构建具有适当查询属性的对象。我在我的承诺请求中使用此对象作为一个实体。重构多个if语句最优雅的方式是什么?以下是一个函数: getQueryParams = (query, pagination, sorting) => { let queryParam = {} if (pagination && pagination.pageNumber) { queryParam.page =

我有一个helper函数,用于构建具有适当查询属性的对象。我在我的承诺请求中使用此对象作为一个实体。重构多个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]);
    }
  });
如果服务按其应该的方式检查其参数,您可以从中受益。大概是这样的:

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 ...;
};

这是一个现场示例。

仅从两个相似且可以通过循环减少的if开始,其余的if都有单独的逻辑,因此我认为您无法在每个服务中减少检查空/未定义/空值,并使用默认值传递所有键。例如,let queryParam={page:pagination.pageNumber | |未定义,…};。一些默认值也可以在参数列表中定义。