You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中如何条件式向对象添加键值对(含Sequelize场景)

解决方案:根据条件动态构建Sequelize查询参数对象

嘿,这个需求在动态构建数据库查询时特别常见,咱们一步步来实现就行😉

步骤1:初始化空对象

先声明你需要的空查询参数对象:

let queryParams = {};

步骤2:处理status存在的情况

这里要先明确“存在”的定义——如果是指status有有效值(不是undefined、null或者空字符串这类假值),可以用基础的条件判断:

// 假设status是你要判断的目标变量,比如来自req.body.status或其他地方
if (status) {
  queryParams.adminapproval = req.body.approvalStatus;
}

如果需要更严谨的判断(比如允许status为0这类假值),可以调整为:

if (status !== undefined && status !== null) {
  queryParams.adminapproval = req.body.approvalStatus;
}

步骤3:处理type存在的情况

当type存在时,给对象添加$or属性,里面放你需要的Sequelize多字段模糊匹配条件。这里推荐用模板字符串拼接%${keyword}%,代码更简洁易读:

// 假设type和keyword都是已定义的变量
if (type) {
  queryParams.$or = [
    Sequelize.where(
      Sequelize.fn('concat_ws', ' ', Sequelize.col('firstName'), Sequelize.col('lastName')),
      { $like: `%${keyword}%` }
    ),
    { email: { $like: `%${keyword}%` } },
    { company: { $like: `%${keyword}%` } },
    { mobileNo: { $like: `%${keyword}%` } },
    { city: { $like: `%${keyword}%` } }
    // 这里可以继续添加其他需要匹配的字段
  ];
}

完整代码示例

把所有逻辑整合到一起,就是这样:

const Sequelize = require('sequelize'); // ES模块环境用import Sequelize from 'sequelize'

let queryParams = {};

// 处理status条件
if (status) { // 根据你的实际业务需求调整判断逻辑
  queryParams.adminapproval = req.body.approvalStatus;
}

// 处理type条件
if (type) { // 根据你的实际业务需求调整判断逻辑
  queryParams.$or = [
    Sequelize.where(
      Sequelize.fn('concat_ws', ' ', Sequelize.col('firstName'), Sequelize.col('lastName')),
      { $like: `%${keyword}%` }
    ),
    { email: { $like: `%${keyword}%` } },
    { company: { $like: `%${keyword}%` } },
    { mobileNo: { $like: `%${keyword}%` } },
    { city: { $like: `%${keyword}%` } }
  ];
}

// 之后直接把queryParams传入Sequelize查询即可
// 比如:YourModel.findAll({ where: queryParams })

小提示

  • 如果你的Sequelize版本是v5及以上,官方推荐使用Op.like代替$like(需要从Sequelize导入Op),代码会更规范:
    const { Op } = require('sequelize');
    // 把{ $like: ... }替换为{ [Op.like]: ... }
    
  • 不用担心SQL注入问题,Sequelize的参数化查询已经帮你处理了用户输入的安全性。

内容的提问来源于stack exchange,提问作者shamon shamsudeen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:55:40