對包含資料的url(字串)的處理
阿新 • • 發佈:2019-02-07
在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)等的處理方法。
根據相似的辦法,增加字元’_’的分割,和字元‘!’的分割。更進一步可以去處理無序的字串等。這樣無非是在圖中向右增加層級!!