javascript 在URL中构造查询参数时,删除qs.stringify中具有空值或null值的键

kgsdhlau  于 2022-10-30  发布在  Java
关注(0)|答案(6)|浏览(330)

我正在构造一个带有查询字符串解析qs.stringify的URL,其中我只希望URL中存在非空或非空值。
我得到的结果如下:

localhost:3000/user?name=john&age=

但是,我不希望在url中包含age参数,因为age的值是null
下面是我的代码摘录:

const url = `/user?${qs.stringify({ name, age })}`;

有人能帮忙吗?

pdsfdshx

pdsfdshx1#

您可以使用Object.fromEntriesObject.entries建立函数,以筛选出非Null和非空白值:

function filterNonNull(obj) {
    return Object.fromEntries(Object.entries(obj).filter(([k, v]) => v));
}

const url = `/user?${qs.stringify(filterNonNull({ name, age }))}`;
lvmkulzt

lvmkulzt2#

qs软件包自v5.1.0起添加了skipNulls选项
若要完全跳过渲染具有null值的关键帧,请使用skipNulls标志:

var nullsSkipped = qs.stringify({ a: 'b', c: null}, { skipNulls: true });
assert.equal(nullsSkipped, 'a=b');

不用担心,qs包也支持跳过undefined值。

console.log(qs.stringify({a: 1, b: undefined}))
// => "a=1"

runkit
但是qs不支持忽略零以下的值:0''

var qs = require("qs")
console.log(qs.stringify({a:1,b:''})) // "a=1&b="
kkbh8khc

kkbh8khc3#

你可以试试这条路

const url = `/user?${qs.stringify(Object.entries(obj).forEach( item => ((item[1] === null) || (item[1] === undefined ) ? delete obj[item[0]] : item));)}`;
t9aqgxwy

t9aqgxwy4#

您也可以使用reg exp const url = ``/user?${qs.stringify({ name, age })}``.replace(/[^=&]+=(&|$)/g,"").replace(/&$/,"")

c0vxltue

c0vxltue5#

您应该只允许那些不为null的属性;最简单的方法如下

const name=null,age=23;
const obj = {
name,
age}
let newObj = {
}
for (prop in obj){
if(obj[prop]){
newObj[prop] = obj[prop];
}
}
console.log(newObj);
erhoui1w

erhoui1w6#

您可以通过回退为空值未定义来删除qs.stringifyfilter选项中的空值:

const values = qs.stringify({a: 1, b: ''}, { filter: (prefix, value) => value || undefined });
assert.equal(values, 'a=1'); // true

相关问题