-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathquerystringify.ts
More file actions
40 lines (32 loc) · 822 Bytes
/
querystringify.ts
File metadata and controls
40 lines (32 loc) · 822 Bytes
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
import encode from './encode';
interface Query {
[key: string]: unknown;
}
/**
* 将query对象转成字符串
* @param query query对象
* @param prefix 前缀
*/
export default function querystringify(query: Query, prefix = ''): string {
const pairs: string[] = [];
function assign(k: string, v: unknown) {
if (k !== null && v !== null) {
pairs.push(`${k}=${v}`);
}
}
Object.keys(query).forEach((key) => {
let val = query[key];
if (val === null || val === undefined || (typeof val === 'number' && isNaN(val))) {
val = '';
}
key = encode(key);
if (Array.isArray(val)) {
val.forEach(v => {
assign(key, encode(v));
});
} else {
assign(key, encode(String(val)));
}
});
return pairs.length ? prefix + pairs.join('&') : '';
}