将对象映射到一行中的key = value字符串

时间:2015-09-08 18:37:26

标签: javascript

有没有办法转换这个对象:

{
    lang: 'en-us',
    episode: 12
}

使用以下格式的字符串?

"lang=en-us&episode=12"

就像将对象映射到查询字符串一样,其中每个属性都是查询参数。

我可以这样做:

var parameters = [];
for(var prop in obj)
   parameters.push(prop + '=' + obj[prop]);
return parameters.join('&');

但我正在寻找单行解决方案。这可能吗?

PS :我无法使用 jQuery 及其任何实用程序功能。解决方案必须是纯JavaScript。

3 个答案:

答案 0 :(得分:1)

您可以在Array.prototype.map阵列上使用Object.keys

npm install when --save

使用ES6,这变得更加简洁:

var data = {"lang": "en-us", "episode": 12};
var str = Object.keys(data).map(function (key) { 
  return "" + key + "=" + data[key]; // line break for wrapping only
}).join("&");
console.log(str);

答案 1 :(得分:1)

您可以使用

var myObj ={"lang": "en-us", "episode": 12};
var str = Object.keys(myObj).map(key => key+"="+myObj[key]).join("&");

这是否更具可读性是另一个问题:)

答案 2 :(得分:0)

所有其他答案都完美无缺,

但是我发现您可以将 URLSearchParams 用于相同的事情...

var myObj = {keyOne: 'keyOneValue', keyTwo: 'keyTwoValue'};
var queryParams = new URLSearchParams(myObj).toString();
console.log(queryParams);
// keyOne=keyOneValue&keyTwo=keyTwoValue

<块引用>

见:https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams