將URL參數轉換為JavaScript對象我有一根這樣的繩子:abc=foo&def=%5Basf%5D&xyz=5如何將其轉換為這樣的JavaScript對象?{
abc: 'foo',
def: '[asf]',
xyz: 5}
3 回答
隔江千里
TA貢獻1906條經驗 獲得超10個贊
編輯
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 轉義引號:相同,因為沒有引號 替換&: 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貢獻1833條經驗 獲得超4個贊
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
paramsToObjectObject.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貢獻1900條經驗 獲得超5個贊
&=
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);});- 3 回答
- 0 關注
- 558 瀏覽
添加回答
舉報
0/150
提交
取消
