如何用更简洁方式替代多if语句实现IGDB API游戏过滤条件拼接?
优化IGDB API查询条件拼接的方案
嘿,我完全懂你现在的困扰——这堆冗长的if-else不仅看着头疼,以后要是加新的筛选维度(比如游戏类型、玩家人数),还得继续堆更多分支,维护起来太糟心了。咱们换个更优雅、扩展性更强的方式来处理:
核心思路:收集非空条件再拼接
不用手动枚举所有可能的条件组合,而是先把所有非空的筛选条件收集到一个数组里,再统一处理拼接逻辑。这样不管有多少个筛选条件,代码都能轻松应对。
优化后的代码示例
基础版(清晰易懂)
function buildIGDBQuery(rating, date, platform) { // 创建一个空数组来存放有效的查询条件 const validConditions = []; // 逐个检查条件,非空就加入数组 if (rating.trim() !== "") validConditions.push(rating); if (date.trim() !== "") validConditions.push(date); if (platform.trim() !== "") validConditions.push(platform); // 根据数组是否有内容,返回对应的查询字符串 if (validConditions.length > 0) { return `where ${validConditions.join(' & ')};`; } else { // 如果没有任何筛选条件,可以返回空字符串或者默认查询逻辑 return ""; } }
简洁版(ES6语法)
如果你的环境支持ES6,可以用过滤逻辑快速处理空值,代码更紧凑:
function buildIGDBQuery(rating, date, platform) { const validConditions = [rating, date, platform].filter(cond => cond.trim() !== ""); return validConditions.length ? `where ${validConditions.join(' & ')};` : ""; }
为什么这个方案更好?
- 扩展性拉满:以后要加新的筛选条件(比如
genre、playerCount),只需要在数组里多加一个元素,或者加一行判断就行,不用修改大量的else if分支 - 代码更易读:逻辑一目了然,谁看都知道是在收集有效条件然后拼接
- 容错性更强:自动忽略空的筛选值,不用手动处理N种组合情况
这样改造后,你的代码不仅优雅了很多,后续维护也会轻松不少~
内容的提问来源于stack exchange,提问作者Samball
相关产品推荐
相关产品推荐

