当前位置: 代码迷 >> JavaScript >> 将URL查询参数转换为对象-保留类型?
  详细解决方案

将URL查询参数转换为对象-保留类型?

热度:16   发布时间:2023-06-05 11:45:34.0

我有以下网址:

https://www.youtube.com/watch?v=-5Dsh9xXuo8&paused=true&volume=100

我想将其转换为:

var parsedUrl = {
  v: "-5Dsh9xXuo8",
  paused: true,
  volume: 100
};

因此,我正在使用一个非常简单的解决方案:

_urlToVideoOptions: function(url) {
  var queryParameters = url.search.substr(1);

  var videoOptions = {};
  queryParameters.split('&').forEach(function(part) {
    var item = part.split('=');
    videoOptions[item[0]] = decodeURIComponent(item[1]);
  });

  return videoOptions;
}

结果是:

var parsedUrl = {
  v: "-5Dsh9xXuo8",
  paused: "true",
  volume: "100"
};

其中暂停和音量是字符串而不是布尔值/数字。

是否有将这些值转换为适当类型的通用方法? 还是我需要调用parseInt,使用自定义的'parseBool'方法等...,并且在出现故障的情况下退回字符串?

没有别的办法了。

_urlToVideoOptions: function(url) {
  var queryParameters = url.search.substr(1);

  var videoOptions = {};
  queryParameters.split('&').forEach(function(part) {
    var item = part.split('=');
    var val = decodeURIComponent(item[1]);
    if (val == "true" || val == "false")
        val = !!val;
    else if (!isNaN(val)) {
        if (val.indexOf('.') != -1)
            val = parseFloat(val);
        else
            val = parseInt(val);
    }
    videoOptions[item[0]] = val;
  });

  return videoOptions;
}
  相关解决方案