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

如何实现API接口多查询参数与逻辑同时筛选武器数据?

问题根源

你当前的写法是每个查询条件单独从全量武器数据中筛选,再用concat拼接结果,得到的自然是多条件的并集。要实现“同时满足所有条件”的与逻辑,应该从全量数据出发,依次叠加所有生效的筛选规则。

优化后代码

// 提前拉取全量武器数据,仅执行一次异步请求
const allWeapons = await weapons;
let filtered = [...allWeapons];

if (query.type) {
  // 提前格式化目标类型,避免循环中重复执行工具函数
  const targetType = formatName(query.type);
  filtered = filtered.filter(w => formatName(w.weaponType) === targetType);
}

if (query.rarity) {
  filtered = filtered.filter(w => w.rarity == query.rarity);
}

// 若业务确实要求无匹配结果时返回全量数据,可保留下面这行,否则建议删除
// if (!filtered.length) filtered = allWeapons;

res.status(HttpStatusCodes.ACCEPTED).send(filtered);

方案说明

  1. 把await weapons提前缓存,避免原写法中每个if分支都重复执行异步请求的性能损耗
  2. 初始过滤池直接使用全量武器数据,每个生效的查询条件都在上一轮的过滤结果中做二次筛选,天然实现多条件的与逻辑
  3. 后续如果需要新增筛选参数(比如武器元素类型、基础攻击力阈值等),只要新增对应的if分支叠加filter即可,扩展性很强
  4. 原写法中无匹配结果时赋值全量数据的逻辑,属于不符合常规筛选预期的特殊处理,确认业务有需要再保留即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:09:01