Make a JavaScript array from URL
我需要从URL创建一个javascript数组,例如:
把这个变成:
1 | http://maps.google.com/maps/api/staticmap?center=Baker Street 221b, London&size=450x450&markers=Baker Street 221b, London&sensor=false |
比如:
1 2 3 | array['center'] = Baker Street 221b, London array['size'] = 450x450 // and so on... |
我需要使这个序列化/非序列化双向工作(URL到数组,数组到URL的一部分)。是否有一些内置函数可以做到这一点?
事先谢谢!
数组的URL:(根据我的回答改编)
1 2 3 4 5 6 7 8 9 10 11 | function URLToArray(url) { var request = {}; var pairs = url.substring(url.indexOf('?') + 1).split('&'); for (var i = 0; i < pairs.length; i++) { if(!pairs[i]) continue; var pair = pairs[i].split('='); request[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]); } return request; } |
数组到URL:
1 2 3 4 5 6 7 8 | function ArrayToURL(array) { var pairs = []; for (var key in array) if (array.hasOwnProperty(key)) pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(array[key])); return pairs.join('&'); } |
当URL字符串的elem[]=23&;elem[]=56时,上述函数urlToarray不工作。请参阅下面的调整函数…希望它能工作-不是100%测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | function URLToArray(url) { var request = {}; var arr = []; var pairs = url.substring(url.indexOf('?') + 1).split('&'); for (var i = 0; i < pairs.length; i++) { var pair = pairs[i].split('='); //check we have an array here - add array numeric indexes so the key elem[] is not identical. if(endsWith(decodeURIComponent(pair[0]), '[]') ) { var arrName = decodeURIComponent(pair[0]).substring(0, decodeURIComponent(pair[0]).length - 2); if(!(arrName in arr)) { arr.push(arrName); arr[arrName] = []; } arr[arrName].push(decodeURIComponent(pair[1])); request[arrName] = arr[arrName]; } else { request[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]); } } return request; } |
从这里取endwith的地方
1 2 3 | function endsWith(str, suffix) { return str.indexOf(suffix, str.length - suffix.length) !== -1; } |
它有一个