1. 程式人生 > >對包含資料的url(字串)的處理

對包含資料的url(字串)的處理

在jq的使用過程中考慮到要對包含資料的url(字串)進行處理,整理一個函式。方便呼叫。
url地址一般為:demo.php?id=1&name=user&page=2
——可以看到字串的第一組資料為目的檔案地址:demo.php,並且用?隔開;第二組資料為id=1&name=user&page=2.

——–可以看到第二組資料中為要取的資料用&隔開。
id = 1 , name = user , page =2

———後續可以想象到:關聯陣列可以array[‘id’]=1,array[‘name’]=user,array[‘page’]=2.

通過以上分析可以得到程式碼了:

   $(document).ready(function(){
        console.log(getWantStr( 'demo.php?id=2&name=user&page=2' ,['=','&']));//由於是對url進行處理預設有?字元。
        //所以引數中可以不帶‘?’
        function  getWantStr(str = '' , splitStr='')//字串,間隔符1,間隔符2,,,,,;
        //多個間隔符組成的陣列,第一個?不算
        {
           var
lengthSplitStr = splitStr.length;//間隔字元的個數,也是說要縱深解析多少層 //?為第一層,&為第二層,=為第三層) var arrs = str.split(splitStr[0]);//轉為陣列,第一層。一般為?,但是在這裡做個不一樣的用=為第一層 var lengthArrs = arrs.length;//第一層的陣列的長度,迴圈的次數 var dataKandV = []; var arrS = []; var dataBack = [] ;//最後存放整理好的資料
var $i = 0;//計數 while($i<(lengthArrs-1)) { if($i==0) { dataKandV = arrs[$i].split('?');//把拆分的陣列放入新陣列中存放 } else { arrS = arrs[$i].split(splitStr[1]) ;//id=1,拆為id 和1 dataKandV.push( arrS[0] );//放入陣列,放在後面(id) dataKandV.push( arrS[1] );//放入陣列,放在後面(1) } $i++; } $i = 0; dataKandV.push( arrs[lengthArrs-1] );//把最後一個數據放入陣列最後, while( $i <= (dataKandV.length-1) ) { if($i==0) { dataBack[0 ] = dataKandV[$i] ;//第一個是目的地址後續是資料,k是引數,v是值, //dataBck[0]=demo.php $i++; } else { dataBack[dataKandV[$i]] = dataKandV[$i + 1];//實現關聯陣列dataBack['id']=1; $i+=2; } } return dataBack;//dataBack[0] ='demo.php',dataBck['id'] =1 ,dataBack['name'] = 'user',dataBack['page']=2 } });

過程見圖:
這裡寫圖片描述
google瀏覽器(F12)輸出:
Array[1]
0: “demo.php”
id: “2”
length: 1
name: “user”
page: “2”
proto: Array[0]

以此類推,在處理的過程中可以發現,以不同的字元開始得到的資料的形式是一樣,但是效率不一樣,根據需求更改吧!
當然還可以進行推廣,比如可以考慮字串(name=user_id&id=2&page=2_now1!2&key=your_name3!4)等的處理方法。
根據相似的辦法,增加字元’_’的分割,和字元‘!’的分割。更進一步可以去處理無序的字串等。這樣無非是在圖中向右增加層級!!