如何使用JavaScript的map处理多层嵌套数组生成指定格式条件字符串
解决方案
你可以把三层嵌套的逻辑逐层拆分处理,每层只负责当前层级的拼接规则,实现起来会很清晰:
- 最内层处理单个条件:把
col、op、colVal拼接成字段 运算符 '值'的格式 - 中间层处理
qryReqs数组:把同组的多个单个条件用and连接,整体包裹小括号 - 最外层处理
qryWhere数组:把所有带括号的条件组用or连接,赋值给对应的qryResult即可
完整实现代码
const processedQry = qry.map(qItem => { // 生成所有用and拼接的括号条件组 const conditionGroups = qItem.qryWhere.map(whereItem => { // 单组内的条件用and拼接 const andConditions = whereItem.qryReqs.map(req => { return `${req.col} ${req.op} '${req.colVal}'` }).join(' and ') return `(${andConditions})` }) // 所有条件组用or拼接,赋值给qryResult qItem.qryResult = conditionGroups.join(' or ') return qItem })
运行结果验证
处理后你可以直接拿到对应值:
qry[0].qryResult对应qryNm为A的结果:(name = 'tom' and country = 'germany') or (name = 'sally' and country = 'italy')qry[1].qryResult对应qryNm为B的结果:(name = 'kirk' and country = 'sweeden') or (name = 'grace' and country = 'usa')
补充注意
如果实际场景中colVal可能包含单引号,需要提前对req.colVal做单引号转义处理,避免生成的条件语句语法错误。
内容的提问来源于stack exchange,提问作者ArthurJ
相关产品推荐
相关产品推荐

