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
,更简洁的方法是 map
和 join
。
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('&');
并且在 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;
});
我无法将 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
,更简洁的方法是 map
和 join
。
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('&');
并且在 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;
});