Javascript 如何从对象数组创建URL编码的查询字符串?

Javascript 如何从对象数组创建URL编码的查询字符串?,javascript,lodash,Javascript,Lodash,我找到了大量关于如何将对象键/值转换为URL编码的查询字符串的示例,但我需要使用对象数组并将它们转换为查询字符串 我想使用纯JS或lodash来完成这个任务 我以这种格式提供一个对象数组: [ { points: "30.09404881287048,-96.064453125" }, { points: "30.09404881287048,-94.63485717773439" }, { points: "29.345072482286373,-96.064453125" },

我找到了大量关于如何将对象键/值转换为URL编码的查询字符串的示例,但我需要使用对象数组并将它们转换为查询字符串

我想使用纯JS或lodash来完成这个任务

我以这种格式提供一个对象数组:

[
  { points: "30.09404881287048,-96.064453125" },
  { points: "30.09404881287048,-94.63485717773439" },
  { points: "29.345072482286373,-96.064453125" },
  { points: "29.345072482286373,-94.63485717773439"}
]
我需要采用以下格式:

points=30.09404881287048%2C-96.064453125&points=30.09404881287048%2C-94.63485717773439&points=29.345072482286373%2C-96.064453125&points=29.345072482286373%2C-94.63485717773439
我目前正在使用以下两种方法完成这项工作:

import { map as _map } from 'lodash';

const createQueryStringFromObject = object =>
  _map(object, (value, key) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`)
    .join('&');

const createQueryStringFromArray = array => array.reduce((queryString, object, index) => {
  return queryString + createQueryStringFromObject(object) + (index < array.length - 1 ? '&' : '');
}, '');
从'lodash'导入{map as_map};
const createQueryStringFromObject=object=>
_映射(对象,(值,键)=>`${encodeURIComponent(键)}=${encodeURIComponent(值)}`)
.加入(“&”);
const createQueryStringFromArray=array=>array.reduce((queryString,object,index)=>{
返回queryString+createQueryStringFromObject(object)+(索引
我发现
reduce
函数的实现很草率,我认为它可以更干净、更高效。有什么建议吗


编辑:我希望保持该方法的通用性,以便它可以接受具有任意键的对象数组,而不仅仅是键
。我还想保留createQueryStringFromObject()方法,因为我需要它在站点的其他位置。

我喜欢您的解决方案,但我认为仅使用内置原型方法将大大简化代码:

list.map(p => `points=${encodeURIComponent(p.points)}`).join('&')
导致


“points=30.09404881287048%2C-96.064453125&points=30.09404881287048%2C-94.63485717773439&points=29.345072482286373%2C-96.064453125&points=29.345072482286373%2C-94.63485717773439”
我正在寻找一个通用实现,它不特定于包含
点的键的任何对象。多亏了melpomene的建议,我只需要使用另一张地图并加入,我给了它一个机会,我肯定更喜欢这种格式。又短又清晰

const createQueryStringFromArray = array =>
  _map(array, object => createQueryStringFromObject(object))
    .join('&');

有什么问题吗?或者你只是在征求意见?你的
reduce
只是另一个
map
+
join
你的数组。reduce((appender,val,i)=>{appender.append('points',val.points);return appender;},new URLSearchParams()。toString()
谢谢你的建议!我喜欢简短的格式。但是,它似乎特定于具有关键点的对象,我希望它更通用。啊,我明白了。根据提供的样本数据,我假设所有项目都将遵循相同的形状。