如何根据对象布尔值生成带and连接的正确语法文本?
解决根据布尔属性生成带and连接的过滤表达式问题
核心思路是先收集所有值为true的属性对应的表达式,再用join(' and ')方法完成拼接——这个方法会自动在多个表达式之间插入and,单个表达式时不会添加多余字符,完美解决你遇到的多余and问题。
具体实现步骤:
- 先定义一个属性与对应表达式的映射对象,方便后续维护和查找:
const attributeExpressions = { priority: 'priority = :priority', overwrites: 'overwrites = :overwrites', recurring: 'recurring = :recurring', search: 'contains(filterText, :keyword)' };
- 准备你的过滤属性对象:
let filterAttributes = { priority: false, overwrites: true, recurring: true, search: false };
- 筛选并拼接表达式:
// 筛选出所有值为true的属性,取出对应的表达式 const activeExpressions = Object.entries(filterAttributes) .filter(([key, isActive]) => isActive) .map(([key]) => attributeExpressions[key]); // 用' and '拼接数组元素,自动处理各种情况 let text = activeExpressions.join(' and ');
验证不同场景:
- 所有属性为
true时,text结果为:'priority = :priority and overwrites = :overwrites and recurring = :recurring and contains(filterText, :keyword)' - 当前案例(仅
overwrites和recurring为true),text结果为:'overwrites = :overwrites and recurring = :recurring' - 仅
overwrites为true时,text结果为:'overwrites = :overwrites'
这个方法逻辑清晰,还能避免手动拼接字符串时容易出现的边界错误,后续新增属性也只需要在attributeExpressions里添加对应项即可。
内容的提问来源于stack exchange,提问作者Khant Min Si Thu
相关产品推荐
相关产品推荐

