我想为我的高级过滤器生成一个查询字符串。我的对象如下所示:
{
searchValue: {
firstName: "John",
lastName: "Doe",
postalCode: "3130",
city: "New York"
},
page: 1
}
我正在使用请求参数 https://nodejs.org/api/querystring.html库来尝试格式化我想要的字符串。
export function updateAdvancedSearchQueryString<T>(props: RouteComponentProps, newValues: T) {
props.history.push({
pathname: props.location.pathname,
search: queryString.stringify(newValues)
});
}
我想要实现的输出:
/trainers?page=1&searchValue=firstName=John&lastName=Doe&postalCode=3130&city=New_York
我目前得到的输出:
/trainers?page=1&searchValue=%5Bobject%20Object%5D
如何从嵌套对象生成所需的查询字符串?
您可以有很多级别的嵌套,因此您应该递归地进行。
像这样的东西应该没问题
const data = {
searchValue: {
firstName: "John",
middleInitial: null,
lastName: "Doe",
postalCode: "3130",
city: "New York"
},
page: 1
}
const createQueryString = (data) => {
return Object.keys(data).map(key => {
let val = data[key]
if (val !== null && typeof val === 'object') val = createQueryString(val)
return `${key}=${encodeURIComponent(`${val}`.replace(/\s/g, '_'))}`
}).join('&')
}
console.log(createQueryString(data))
但是您必须考虑传递一些带有函数作为其值之一的对象的情况,以及如何处理类似的数组。但基本思想很简单:如果您找到对象作为值,请使用相同的函数将其转换为查询字符串
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)