如何修改JavaScript代码以排除空字符串的查询参数?
如何修改JavaScript代码以省略查询字符串中的空字符串参数?
问题场景
我们需要将仅包含字符串和数组类型的JavaScript对象转换为查询字符串参数,要求自动省略空数组和空字符串对应的参数。现有代码已经能正确忽略空数组,但仍会保留值为空字符串的参数,需要调整实现。
示例对象:
var filters = { make: ["Ford", "Honda"], year: [], color: "Black", model: "" }
现有实现代码:
mapQueryStringParameters = function (params) { return params ? '?' + Object.entries(params) .flatMap(([key, value]) => [value].flat().map(v => [key, v])) .map(it => it.join("=")) .join("&") : ""; }
当前代码生成结果(保留了空字符串的model参数):
"?make=Ford&make=Honda&color=Black&model="
修改方案
只需要在生成键值对的流程中,添加一步过滤逻辑,去掉值为空字符串的项即可。有两种等价的实现方式:
方式一:在flatMap内部过滤
mapQueryStringParameters = function (params) { return params ? '?' + Object.entries(params) .flatMap(([key, value]) => [value].flat().map(v => [key, v]).filter(([_, v]) => v !== "") ) .map(it => it.join("=")) .join("&") : ""; }
方式二:在flatMap之后统一过滤
mapQueryStringParameters = function (params) { return params ? '?' + Object.entries(params) .flatMap(([key, value]) => [value].flat().map(v => [key, v])) .filter(([_, v]) => v !== "") .map(it => it.join("=")) .join("&") : ""; }
效果说明
修改后,示例对象生成的查询字符串将变为:
"?make=Ford&make=Honda&color=Black"
空数组year和空字符串model对应的参数都被正确省略,符合需求。
内容的提问来源于stack exchange,提问作者PixelPaul
相关产品推荐
相关产品推荐

