【问题标题】:What is the best way for reducing multiple if statement?减少多个 if 语句的最佳方法是什么?
【发布时间】:2019-09-24 10:07:03
【问题描述】:

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

【问题讨论】:

  • 只开始两个 if 是相似的,可以通过循环减少,其余的有单独的逻辑,所以我认为你不能减少太多
  • 指导您的服务检查空/未定义/空值,并使用默认值传递所有键。前任。 let queryParam = {page: pagination.pageNumber || undefined, ...};。一些默认值也可以在参数列表中定义。

标签: javascript ecmascript-6 ecmascript-2016


【解决方案1】:

如果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 上的一个活生生的例子。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-30
      • 2019-06-06
      • 1970-01-01
      • 1970-01-01
      • 2015-02-12
      相关资源
      最近更新 更多