使用reduce的Javascript对象查询字符串

时间:2015-09-28 20:43:50

标签: javascript object reduce

我无法将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并稍后删除&

2 个答案:

答案 0 :(得分:6)

而不是reduce,更简洁的方式是mapjoin

Object.keys(obj).map(function(x){
    return x + '=' + obj[x];
}).join('&');
  • 地图制作和数组如下:["a=1", "b=213123", "c=null", "d=false"]
  • 加入将其转换为查询字符串:a=1&b=213123&c=null&d=false

答案 1 :(得分:3)

您可以将mapjoin

一起使用
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;
});