将 URL 个查询参数转换为对象 - 保留类型?
Convert URL query parameters to object - preserve type?
我有以下 URL:
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"
};
其中 paused 和 volume 是字符串而不是 boolean/number。
是否有一种通用的方法可以将这些值转换为适当的类型?或者我是否需要调用 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;
}
我有以下 URL:
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"
};
其中 paused 和 volume 是字符串而不是 boolean/number。
是否有一种通用的方法可以将这些值转换为适当的类型?或者我是否需要调用 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;
}