3 回答

TA貢獻(xiàn)2065條經(jīng)驗(yàn) 獲得超14個(gè)贊
編輯
var search = location.search.substring(1);JSON.parse('{"' + decodeURI(search).replace(/"/g, '\\"').replace(/&/g, '","').replace(/=/g,'":"') + '"}')
例
abc=foo&def=%5Basf%5D&xyz=5
decdeURI:abc=foo&def=[asf]&xyz=5 轉(zhuǎn)義引號:相同,因?yàn)闆]有引號 替換&: abc=foo","def=[asf]","xyz=5
取代=: abc":"foo","def":"[asf]","xyz":"5
有卷曲和引號: {"abc":"foo","def":"[asf]","xyz":"5"}
var search = location.search.substring(1);JSON.parse('{"' + search.replace(/&/g, '","').replace(/=/g,'":"') + '"}', function(key, value) { return key===""?value:decodeURIComponent(value) })
例
search = "abc=foo&def=%5Basf%5D&xyz=5&foo=b%3Dar";
Object {abc: "foo", def: "[asf]", xyz: "5", foo: "b=ar"}
原始答案
JSON.parse('{"' + decodeURI("abc=foo&def=%5Basf%5D&xyz=5".replace(/&/g, "\",\"").replace(/=/g,"\":\"")) + '"}')

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊
let params = new URLSearchParams('abc=foo&def=%5Basf%5D&xyz=5');params.get("abc"); // "foo"
function paramsToObject(entries) { let result = {} for(let entry of entries) { // each 'entry' is a [key, value] tupple const [key, value] = entry; result[key] = value; } return result;}
基本演示
const urlParams = new URLSearchParams('abc=foo&def=%5Basf%5D&xyz=5');const entries = urlParams.entries(); //returns an iterator of decoded [key,value] tuplesconst params = paramsToObject(entries); //{abc:"foo",def:"[asf]",xyz:"5"}
使用Object.From Entry和Side
paramsToObject
Object.fromEntries(entries)
.
.entries
要迭代的值對是列表名稱-值對,鍵是名稱,值是值。
const urlParams = new URLSearchParams('abc=foo&def=%5Basf%5D&xyz=5');const params = Object.fromEntries(...params); // {abc: "foo", def: "[asf]", xyz: "5"}
注:

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超6個(gè)贊
&
=
var str = "abc=foo&def=%5Basf%5D&xy%5Bz=5"var obj = str.split("&").reduce(function(prev, curr, i, arr) { var p = curr.split("="); prev[decodeURIComponent(p[0])] = decodeURIComponent(p[1]); return prev;}, {});
var obj = {}; str.replace(/([^=&]+)=([^&]*)/g, function(m, key, value) { obj[decodeURIComponent(key)] = decodeURIComponent(value);});
添加回答
舉報(bào)