javascript - 模板文字连接中的条件语句?
问题描述
我正在进行这样的 API 调用:
posts: (ppp, page) =>
requests.get(`/wp-json/wp/v2/posts?per_page=${ppp}&page=${page}`)
不过,我并不总是会在每页或每页中传递帖子,所以我只想连接这些变量(如果它们存在)。我在下面尝试过,但似乎无法降低格式:
requests.get(`/wp-json/wp/v2/posts?`${ppp ? `'per_page='${ppp} : `''` `${page} ? `'&page=' ${page}` :''`)
解决方案
除了您的第二个解决方案包含语法错误之外,它也不是最易读的方法......
但是你为什么要重新发明轮子呢?
您可以使用在客户端和Node.jsURL
中都可用的 API :
posts: (ppp, page) => {
const url = new URL('/wp-json/wp/v2/posts')
if(ppp) url.searchParams.append('per_page', ppp)
if(page) url.searchParams.append('page', page)
return requests.get(url.href)
}
但是,如果由于某种原因不能使用上述解决方案,您仍然可以实现与上述解决方案类似的算法。例如,您可以使用数组:
posts: (ppp, page) => {
const urlParams = []
if(ppp) urlParams.push(`per_page=${ppp}`)
if(page) urlParams.push(`page=${page}`)
return requests.get(`/wp-json/wp/v2/posts?${ urlParams.join('&') }`)
}
或者更灵活的解决方案:
posts: (ppp, page) => {
const urlParams = {
per_page: ppp, //per_page=ppp
page, //page=page
//Add more here if you want
}
return requests.get(`/wp-json/wp/v2/posts?${
Object
.entries(urlParams)
.filter(([k, v]) => v) //If value is truthy
.map(e => e.join('=')) //Concatenate key and value with =
.join('&') //Concatenate key-value pairs with &
}`)
}
但是,如果你想坚持你的版本,这里有一个固定的例子:
requests.get(`/wp-json/wp/v2/posts?${ppp ? `per_page=${ppp}` : ''}${(ppp && page) ? '&' : ''}${page ? `page=${page}` : ''}`)
推荐阅读
- javascript - 如何正确定义机器人的前缀,使其不响应任何单字母前缀?
- sql - 如何更好地返回一个项目(如果它存在)而不是另一个?
- leaflet - 有没有办法控制自定义图标在放大传单时的移动
- javascript - 如何防止在 ClickFunnels 上提交表单
- sql - 如何将重复的行组合成单行唯一标识符
- ios - 将 AVI 视频转换为 MP4 视频(用于在 iOS 上播放)
- java - 将数据放入数组的问题
- javascript - 上传文件后重新加载ajax代码dropzone.js
- java - 在没有 DispatcherServlet 的情况下配置 Spring REST 控制器
- java - 如果 jsonArray 的数组为空,为什么 Jsonpath 不返回空?