Skip to content

Commit e798901

Browse files
committed
refactoring getParams
1 parent 806bf3a commit e798901

File tree

6 files changed

+30
-15
lines changed

6 files changed

+30
-15
lines changed

dist/url.js

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,12 @@
4040
var row = _query.split('=', 2);
4141

4242
var key = row[0];
43-
var value = row[1] || ''; // @todo обработать массивы с числовыми индексами // const match = key.match(/(.+?)\[(\d*)\]/i);
43+
var value = row[1] || '';
44+
var match = key.match(/(.+?)\[(\d*)\]/i);
4445

45-
if (key.substr(-2) === '[]') {
46-
key = key.substr(0, key.length - 2);
46+
if (match) {
47+
key = match[1];
48+
var index = match[2];
4749

4850
if (
4951
params[key] === undefined ||
@@ -52,7 +54,11 @@
5254
params[key] = [];
5355
}
5456

55-
params[key].push(value);
57+
if (index === '') {
58+
params[key].push(value);
59+
} else {
60+
params[key][index] = value;
61+
}
5662
} else {
5763
params[key] = value;
5864
}

dist/url.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "vanilla-js-url",
3-
"version": "2.4.1",
3+
"version": "2.5.0",
44
"devDependencies": {
55
"@babel/core": "^7.9.0",
66
"@babel/preset-env": "^7.9.0",
@@ -9,7 +9,7 @@
99
"esm": "^3.2.25",
1010
"jest": "^25.2.7",
1111
"prettier": "2.0.2",
12-
"rollup": "^2.3.2",
12+
"rollup": "^2.3.3",
1313
"rollup-plugin-babel": "^4.4.0"
1414
},
1515
"scripts": {

src/_buildParams.js

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,21 @@ export default function _buildParams(query, decode = true) {
2020
let key = row[0];
2121
let value = row[1] || '';
2222

23-
// @todo обработать массивы с числовыми индексами // const match = key.match(/(.+?)\[(\d*)\]/i);
23+
const match = key.match(/(.+?)\[(\d*)\]/i);
2424

25-
if (key.substr(-2) === '[]') {
26-
key = key.substr(0, key.length - 2);
25+
if (match) {
26+
key = match[1];
27+
let index = match[2];
2728

2829
if (params[key] === undefined || !Array.isArray(params[key])) {
2930
params[key] = [];
3031
}
3132

32-
params[key].push(value);
33+
if (index === '') {
34+
params[key].push(value);
35+
} else {
36+
params[key][index] = value;
37+
}
3338
} else {
3439
params[key] = value;
3540
}

src/url.test.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ describe('GET', () => {
99
expect(getParams('example.com?bar=1&bar[]=2')).toEqual({ bar: ['2'] });
1010
expect(getParams('example.com?bar=test+test%2Ctest')).toEqual({ bar: 'test test,test' });
1111
expect(getParams('example.com?s%5B%5D=4%264&s%5B%5D=3&r=s+s%2Bs')).toEqual({ s: ['4&4', '3'], r: 's s+s' });
12+
expect(getParams('example.com?bar[]=0&bar[1]=1&bar[2]=2')).toEqual({ bar: ['0', '1', '2'] });
13+
expect(getParams('example.com?too=q&bar[]=1&bar[0]=0&bar[2]=2&foo[]=1&foo[]=2'))
14+
.toEqual({ too: 'q', bar: ['0', undefined, '2'], foo: ['1', '2'] });
1215
});
1316

1417
test('getParamsExtended()', () => {
@@ -32,6 +35,7 @@ describe('ADD', () => {
3235
expect(addParams('example.com?bar=1&bar[]=2', { bar: [3, 4] })).toBe('example.com?bar[]=2&bar[]=3&bar[]=4');
3336
expect(addParams('example.com?bar=1&bar=2', { bar: [3, 4] })).toBe('example.com?bar[]=3&bar[]=4');
3437
expect(addParams('example.com?bar[]=1&bar[]=2', { bar: [3, 4] })).toBe('example.com?bar[]=1&bar[]=2&bar[]=3&bar[]=4');
38+
expect(addParams('example.com?bar[0]=1&bar[2]=2', { bar: [3, 4] })).toBe('example.com?bar[]=1&bar[]=2&bar[]=3&bar[]=4');
3539
});
3640

3741
test('addParamsExtended()', () => {

yarn.lock

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4226,10 +4226,10 @@ rollup-pluginutils@^2.8.1:
42264226
dependencies:
42274227
estree-walker "^0.6.1"
42284228

4229-
rollup@^2.3.2:
4230-
version "2.3.2"
4231-
resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.3.2.tgz#afa68e4f3325bcef4e150d082056bef450bcac60"
4232-
integrity sha512-p66+fbfaUUOGE84sHXAOgfeaYQMslgAazoQMp//nlR519R61213EPFgrMZa48j31jNacJwexSAR1Q8V/BwGKBA==
4229+
rollup@^2.3.3:
4230+
version "2.3.3"
4231+
resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.3.3.tgz#5982df700d7aae8907075ba68122bb57d98e9cd0"
4232+
integrity sha512-uJ9VNWk80mb4wDCSfd1AyHoSc9TrWbkZtnO6wbsMTp9muSWkT26Dvc99MX1yGCOTvUN1Skw/KpFzKdUDuZKTXA==
42334233
optionalDependencies:
42344234
fsevents "~2.1.2"
42354235

0 commit comments

Comments
 (0)