Express.js中使用req.query.categoryId过滤JSON对象的问题
问题分析与解决方案
核心问题是类型不匹配:通过req.query.categoryId获取的参数默认是字符串类型,而你JSON对象里的categoryId大概率是数字类型。全等运算符===会同时比较值和类型,导致明明值看起来一样,但因为类型不同匹配失败。
解决方法:
- 类型统一转换(推荐):把获取到的参数转为数字类型,再进行过滤:
const paramCategory = Number(req.query.categoryId); result = result.filter((x) => x.categoryId === paramCategory); - 使用非全等运算符:如果不想做类型转换,可改用
==(它会自动做类型转换,但注意隐式转换可能带来的意外问题):const paramCategory = req.query.categoryId; result = result.filter((x) => x.categoryId == paramCategory); - 特殊情况处理:如果你的
categoryId本身是字符串类型(比如带字母的ID),检查JSON对象里的categoryId是否也是字符串,不一致的话统一转成字符串即可:const paramCategory = String(req.query.categoryId); result = result.filter((x) => x.categoryId === paramCategory);
额外排查点:
如果转类型后还是没效果,检查paramCategory是否为NaN(比如请求中categoryId参数为空或非数字内容),可以加个判断避免无效过滤:
const paramCategory = Number(req.query.categoryId); if (!isNaN(paramCategory)) { result = result.filter((x) => x.categoryId === paramCategory); }
内容的提问来源于stack exchange,提问作者sametcekin
相关产品推荐
相关产品推荐

