Javascript 将具有数组值的对象键转换为查询字符串

Javascript 将具有数组值的对象键转换为查询字符串,javascript,oop,ecmascript-6,Javascript,Oop,Ecmascript 6,我试图将我的对象转换为查询字符串,但我有一个数组作为值 我的物体看起来像这样 过滤器选择:{ 角色:[西南,西南] 资料来源:[二级、三级] } 我已经完成了一半的转化 const toQueryString = `?${Object.keys(filterChoice) .map(key => `${key}=${filterChoice[key].toString()}`) .join('&')}` 哪些输出:?源=二级、三级和角色=软件、电子战 但是我希望这

我试图将我的对象转换为查询字符串,但我有一个数组作为值

我的物体看起来像这样

过滤器选择:{ 角色:[西南,西南] 资料来源:[二级、三级] }

我已经完成了一半的转化

const toQueryString = `?${Object.keys(filterChoice)
    .map(key => `${key}=${filterChoice[key].toString()}`)
    .join('&')}`
哪些输出:?源=二级、三级和角色=软件、电子战 但是我希望这个输出像这样

?来源=二级和来源=三级和角色=软件和角色=电子战


有人能帮我吗?

您可以平面映射对象条目:

 const query = Object.entries(filterChoice)
  .flatMap(([key, value]) => [value].flat().map(v => [key, v]))
  .map(it => it.join("="))
  .join("&");

您可以平面映射对象条目:

 const query = Object.entries(filterChoice)
  .flatMap(([key, value]) => [value].flat().map(v => [key, v]))
  .map(it => it.join("="))
  .join("&");

您可以使用URLSearchParam并遍历Object.keys,然后遍历每个值

var过滤器选择={ 角色:[SW,EW], 资料来源:[二级、三级] } 变量URL=https://example.com/; var searchParams=新的URLSearchParamsURL; Object.keysfilterChoice.forEachkey=>{ filterChoice[key]。forEachval=>{ searchParams.appendkey,val; } } console.log searchParams.toString
您可以使用URLSearchParam并遍历Object.keys,然后遍历每个值

var过滤器选择={ 角色:[SW,EW], 资料来源:[二级、三级] } 变量URL=https://example.com/; var searchParams=新的URLSearchParamsURL; Object.keysfilterChoice.forEachkey=>{ filterChoice[key]。forEachval=>{ searchParams.appendkey,val; } } console.log searchParams.toString
谢谢,这太完美了!谢谢,这太完美了!这有意义吗?您是否将该查询发送到服务器驱动的应用程序或中间件?如果是这样,则只能从查询中获取一个角色或源参数。这只是API查询的一半,还有其他变量与question@marcel不,这是通过查询传递数组的方式,如果您有toWell。。。我不知道。我在角色[]=SW和角色[]=EW方面一直做得很好。很高兴知道。谢谢你的澄清。@marcel是的,两个都看到了。最后查找,似乎根本没有指定它,甚至没有指定&、=语法,所以所有这些实际上都取决于后端如何处理它。所以我之前的评论没有那么有意义,对不起。这有意义吗?您是否将该查询发送到服务器驱动的应用程序或中间件?如果是这样,则只能从查询中获取一个角色或源参数。这只是API查询的一半,还有其他变量与question@marcel不,这是通过查询传递数组的方式,如果您有toWell。。。我不知道。我在角色[]=SW和角色[]=EW方面一直做得很好。很高兴知道。谢谢你的澄清。@marcel是的,两个都看到了。最后查找,似乎根本没有指定它,甚至没有指定&、=语法,所以所有这些实际上都取决于后端如何处理它。所以我之前的评论没有那么有意义,对不起。