这个题目不约而同的出现在了多家公司的面试题中,当然也是因为太过于典型,解决方案无非就是拆字符或者用正则匹配来解决,我个人强烈建议用正则匹配,因为url允许用户随意输入,如果用拆字符的方式,有任何一处没有考虑到容错,就会导致整个js都报错。而正则就没有这个问题,他只匹配出正确的配对,非法的全部过滤掉,简单,方便。
实现代码:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
function getQueryObject(url)
{ url
= url == null ?
window.location.href : url; var search
= url.substring(url.lastIndexOf("?")
+ 1); var obj
= {}; var reg
= /([^?&=]+)=([^?&=]*)/g; search.replace(reg, function (rs,
$1, $2) { var name
= decodeURIComponent($1); var val
= decodeURIComponent($2); val
= String(val); obj[name]
= val; return rs; }); return obj;}getQueryObject("http://www.cnblogs.com/leee/p/4456840.html?name=1&dd=ddd**")Object
{name: "1",
dd: "ddd**"} |
-----------------------------2016/11/10跟新------------------------------------
2,将对象转化成url参数。fetch
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
function param(a)
{ var s
= [], rbracket = /\[\]$/, isArray
= function (obj)
{ return Object.prototype.toString.call(obj)
=== '[object
Array]'; },
add = function (k,
v) { v
= typeof v
=== 'function' ?
v() : v === null ? '' :
v === undefined ? '' :
v; s[s.length]
= encodeURIComponent(k) + '=' +
encodeURIComponent(v); },
buildParams = function (prefix,
obj) { var i,
len, key; if (prefix)
{ if (isArray(obj))
{ for (i
= 0, len = obj.length; i < len; i++) { if (rbracket.test(prefix))
{ add(prefix,
obj[i]); } else { buildParams(prefix
+ '[' +
(typeof obj[i]
=== 'object' ?
i : '')
+ ']',
obj[i]); } } } else if (obj
&& String(obj) === '[object
Object]')
{ for (key in obj)
{ buildParams(prefix
+ '[' +
key + ']',
obj[key]); } } else { add(prefix,
obj); } } else if (isArray(obj))
{ for (i
= 0, len = obj.length; i < len; i++) { add(obj[i].name,
obj[i].value); } } else { for (key in obj)
{ buildParams(key,
obj[key]); } } return s; }; return buildParams('',
a).join('&').replace(/%20/g, '+');} |
用到此方法
本文介绍了一种使用正则表达式解析URL查询参数的方法,并提供了一个JavaScript函数实现。此外,还详细展示了如何将对象转换为URL参数字符串,适用于前端开发中的数据传输场景。
284

被折叠的 条评论
为什么被折叠?



