JavaScript如何处理前端传入对象生成含$in条件的查询过滤对象
完整实现代码
let args = {}; for (let key in filters) { // 加可选链避免undefined报错 if (filters[key]?.length > 0) { if (key === "category") { // 先初始化category基础结构 const categoryConfig = { name: filters['category'] } // 仅当subCategory为非空数组时才追加对应字段 if (Array.isArray(filters.subCategory) && filters.subCategory.length > 0) { // map遍历提取所有subCategory的name属性组成数组 const subNameList = filters.subCategory.map(item => item.name); categoryConfig.subCategory = { name: { $in: subNameList } } } args.category = categoryConfig; } } } console.log(args);
核心逻辑说明
- 提取
subCategory的name数组:使用数组的map方法遍历subCategory,逐个返回每个元素的name属性,直接生成符合$in参数要求的字符串数组,适配任意长度的subCategory数组。 - 动态生成
subCategory字段:不要将subCategory写死在初始化的category对象中,先创建仅包含name的基础对象,再判断subCategory的合法性(是数组且长度大于0),满足条件才追加subCategory字段,无符合条件的subCategory时不会生成多余字段。
效果验证
- 若前端传入的
subCategory为空数组,生成的过滤参数为{ category: {name: "Fashion"} },无冗余字段 - 若
subCategory有值,生成的参数完全匹配要求的目标格式,$in数组内容会随传入的subCategory动态更新。
内容的提问来源于stack exchange,提问作者user17578307
相关产品推荐
相关产品推荐

