使用reduce将Javascript对象转换为querystring

使用reduce将Javascript对象转换为querystring,javascript,object,reduce,Javascript,Object,Reduce,我很难对对象应用查询字符串格式 我想要这个: > 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 +

我很难对
对象应用查询字符串格式

我想要这个:

> 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
有没有更简单的方法来实现这一点,而不必预先设置初始值并在以后删除
&



编辑:这个问题很老了,现在我们可以只使用
新的URLSearchParams(object.toString()

而不是执行
减少
,一个更干净的方法是
映射
加入

Object.keys(obj).map(function(x){
    return x + '=' + obj[x];
}).join('&');
  • map制作和数组如下:
    [“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('&');
在查询字符串的两侧使用
encodeURIComponent
非常重要:

return Object.keys(obj).map(function(i) {
  return encodeURIComponent(i) + '=' + encodeURIComponent(obj[i]);
}).join('&');
如果您需要随时返回查询字符串:

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;
});

谢谢正是我需要的。