【问题标题】:Mapping object to key=value string in one line在一行中将对象映射到 key=value 字符串
【发布时间】:2015-12-04 13:27:23
【问题描述】:

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

{
    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。

【问题讨论】:

  • ... 把它放到一个函数中?不相关,但如果值可以是任意的,请确保将它们制成 URL 安全字符串。
  • JavaScript 中的“一行”要求没有多大意义,因为您可以将所有代码放在同一行中。代码以何种方式成为单行解决方案?

标签: javascript


【解决方案1】:

您可以在Object.keys 数组上使用Array.prototype.map

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

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

var data = {"lang": "en-us", "episode": 12};
var str = Object.keys(data).map(key => `${key}=${data[key]}`).join("&");
console.log(str);

【讨论】:

    【解决方案2】:

    你可以使用

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

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

    【讨论】:

      【解决方案3】:

      所有其他答案都完美,

      但是我发现你可以使用 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-04-17
        • 1970-01-01
        • 2011-05-19
        • 2021-02-24
        • 2021-08-04
        • 2018-05-29
        • 2019-01-25
        • 1970-01-01
        相关资源
        最近更新 更多