読みやすくするために改行しています。
ちゃんとしたワンライナー(;
無し)になったのは2だけです。
(もうちょっと頑張れるのかも知れませんが…)
ES2015版の動作確認は Firefox 50.0, Chrome 54.0.2840.98 で行いました。
1. ES2015
window.location.search.substring(1).split('&')
.reduce((result, query) => {
const [k, v] = query.split('=');
result[k] = decodeURI(v);
return result;
}, {});
2. ES2015 (Object.assignを使ったバージョン)
window.location.search.substring(1).split('&')
.map(query => query.split('='))
.reduce((result, [k, v]) => Object.assign(result, { [k]: decodeURI(v) }), {});
3. ES5
window.location.search.substring(1).split('&')
.reduce(function(result, query) {
var pair = query.split('=');
result[pair[0]] = decodeURI(pair[1]);
return result;
}, {});
使い方
// ES2015
const getUrlParams = () => window.location.search.substring(1).split('&').reduce((result, query) => { const [k, v] = query.split('='); result[k] = decodeURI(v); return result; }, {});
//ES5
var getUrlParams = function() {
return window.location.search.substring(1).split('&').reduce(function(result, query) { var pair = query.split('='); result[pair[0]] = decodeURI(pair[1]); return result; }, {});
}
getUrlParams();
実行結果
サンプルURL
結果
{
site: "",
source: "hp",
q: "あいう+えお",
oq: "あいう+えお"
}