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

Javascript Object to querystring using 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 并稍后删除 &


编辑:这个问题很老了,今天我们可以使用 new URLSearchParams(object).toString()safely

不使用 reduce,更简洁的方法是 mapjoin

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

您可以将 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;
});