第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

將URL參數(shù)轉(zhuǎn)換為JavaScript對象

將URL參數(shù)轉(zhuǎn)換為JavaScript對象

郎朗坤 2019-07-22 19:14:13
將URL參數(shù)轉(zhuǎn)換為JavaScript對象我有一根這樣的繩子:abc=foo&def=%5Basf%5D&xyz=5如何將其轉(zhuǎn)換為這樣的JavaScript對象?{   abc: 'foo',   def: '[asf]',   xyz: 5}
查看完整描述

3 回答

?
翻翻過去那場雪

TA貢獻(xiàn)2065條經(jīng)驗(yàn) 獲得超14個(gè)贊

編輯

此編輯改進(jìn)并解釋了基于注釋的答案。

var search = location.search.substring(1);JSON.parse('{"' + decodeURI(search).replace(/"/g, '\\"').replace(/&/g, '","').replace(/=/g,'":"') + '"}')

解析abc=foo&def=%5Basf%5D&xyz=5分五個(gè)步驟:

  • 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"}

這是合法的JSON。

改進(jìn)解允許搜索字符串中的更多字符。它使用一個(gè)REVERVER函數(shù)對URI進(jìn)行解碼:

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,"\":\"")) + '"}')



查看完整回答
反對 回復(fù) 2019-07-22
?
慕標(biāo)琳琳

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超9個(gè)贊

從ES6和ON開始,Javascript提供了幾個(gè)構(gòu)造,以便為這個(gè)問題創(chuàng)建一個(gè)可執(zhí)行的解決方案。

這包括使用URLSearchParams迭代器

let params = new URLSearchParams('abc=foo&def=%5Basf%5D&xyz=5');params.get("abc"); // "foo"

如果用例要求實(shí)際將其轉(zhuǎn)換為對象,則可以實(shí)現(xiàn)以下功能:

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

我們可以用Object.fromEntry(目前處于第4階段),paramsToObject帶著Object.fromEntries(entries).

因?yàn)閁RLParams返回可迭代對象,使用擴(kuò)展算子而不是打電話.entries還將根據(jù)其規(guī)范生成條目:

要迭代的值對是列表名稱-值對,鍵是名稱,值是值。

const urlParams = new URLSearchParams('abc=foo&def=%5Basf%5D&xyz=5');const params = Object.fromEntries(...params); // {abc: "foo", def: "[asf]", xyz: "5"}

注:所有值都自動(dòng)為字符串,按照URLSearchParams規(guī)范


查看完整回答
反對 回復(fù) 2019-07-22
?
呼啦一陣風(fēng)

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超6個(gè)贊

裂開&若要獲取名稱/值對,請將每對拆分為=..下面是一個(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;}, {});

另一種方法是使用正則表達(dá)式:

var obj = {}; str.replace(/([^=&]+)=([^&]*)/g, function(m, key, value) {
    obj[decodeURIComponent(key)] = decodeURIComponent(value);});

這是從約翰·雷西格的作品中改編而來的“搜索而不替換”.


查看完整回答
反對 回復(fù) 2019-07-22
  • 3 回答
  • 0 關(guān)注
  • 2186 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號