使用reduce将Javascript对象转换为查询字符串
Javascript Object to querystring using reduce
我遇到了麻烦,以减少到一个Object
得到它在查询字符串格式。
我想要这个:
> var obj = {a: 1, b: "213123", c: null, d:false}
> obj2querystring(obj);
a=1&b=213123&c=null&d=false
到目前为止,我得到的最接近的是:
Object.keys(obj).reduce(function(prev, curr){
return prev + '&' + curr + '=' + obj[curr];
}, '');
得到:
&a=1&b=213123&c=null&d=false
是否有更简单的方法来实现这一点,而不必添加initialValue并稍后删除&
?
编辑:这个问题是老问题了,今天我们可以安全地使用new URLSearchParams(object).toString()
不做reduce
,更干净的方法是map
和join
。
Object.keys(obj).map(function(x){
return x + '=' + obj[x];
}).join('&');
- map make and array如下:
["a=1", "b=213123", "c=null", "d=false"]
- join将其转换为查询字符串:
a=1&b=213123&c=null&d=false
您可以使用map
与join
:
return Object.keys(obj).map(function(i) {
return i + '=' + obj[i];
}).join('&');
在queryString的两边使用encodeURIComponent
是很重要的:
return Object.keys(obj).map(function(i) {
return encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);
}).join('&');
如果您需要随时返回queryString:
location.search.slice(1).split('&').map(function(i) {
var arr = i.split('=');
var a = {};
a[decodeURIComponent(arr[0])] = arr[1] ? decodeURIComponent(arr[1]) : void 0;
return a;
}).reduce(function(a, b) {
var key = Object.keys(b)[0];
a[key] = b[key];
return a;
});
相关文章:
- 如何有效地将游戏数据存储在URL查询字符串中
- 从查询字符串参数推断出正确的数据类型
- AngularJS:获取链接中没有哈希的查询字符串值
- AngularJS,如何更改查询字符串
- 如何将activeadmin查询字符串传递给batch_action
- 如何从查询字符串中的输入字段发回文本
- Django在使用AJAX时没有接收到新的查询字符串
- 使用查询字符串方法清除浏览器缓存
- 用于刷新的Javascript更改查询字符串
- 我想将查询字符串变量添加到JSON名称/值对中
- 将查询字符串值从页面传递 asp.net 到 iframe
- jqueryajax生成查询字符串,如果未定义则不通过
- 如何将查询字符串传递到HTML框架
- AngularJs将查询字符串发布到c#控制器
- Jquery - 从查询字符串中获取“#”值之后,而不是在“?”符号值之后获取
- 在 JavaScript 中将查询字符串传递给 Web 服务 (ASP.NET)
- 在查询字符串中查找 where 子句
- POST encodeURI查询字符串内部服务器错误 500
- JavaScript:从具有使用 # 符号的路由的 URL 获取查询字符串
- 更改链接 URL 中的路径名,同时保持查询字符串不变