Javascript 减少多重if语句的最佳方法是什么?
我有一个helper函数,用于构建具有适当查询属性的对象。我在我的承诺请求中使用此对象作为一个实体。重构多个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 =
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 | |未定义,…};。一些默认值也可以在参数列表中定义。