@@ -7,11 +7,21 @@ var Utils = require('./utils');
7
7
8
8
var internals = {
9
9
delimiter : '&' ,
10
- indices : true
10
+ arrayPrefixGenerators : {
11
+ brackets : function ( prefix , key ) {
12
+ return prefix + '[]' ;
13
+ } ,
14
+ indices : function ( prefix , key ) {
15
+ return prefix + '[' + key + ']' ;
16
+ } ,
17
+ repeat : function ( prefix , key ) {
18
+ return prefix ;
19
+ }
20
+ }
11
21
} ;
12
22
13
23
14
- internals . stringify = function ( obj , prefix , options ) {
24
+ internals . stringify = function ( obj , prefix , generateArrayPrefix ) {
15
25
16
26
if ( Utils . isBuffer ( obj ) ) {
17
27
obj = obj . toString ( ) ;
@@ -39,13 +49,11 @@ internals.stringify = function (obj, prefix, options) {
39
49
var objKeys = Object . keys ( obj ) ;
40
50
for ( var i = 0 , il = objKeys . length ; i < il ; ++ i ) {
41
51
var key = objKeys [ i ] ;
42
- if ( ! options . indices &&
43
- Array . isArray ( obj ) ) {
44
-
45
- values = values . concat ( internals . stringify ( obj [ key ] , prefix , options ) ) ;
52
+ if ( Array . isArray ( obj ) ) {
53
+ values = values . concat ( internals . stringify ( obj [ key ] , generateArrayPrefix ( prefix , key ) , generateArrayPrefix ) ) ;
46
54
}
47
55
else {
48
- values = values . concat ( internals . stringify ( obj [ key ] , prefix + '[' + key + ']' , options ) ) ;
56
+ values = values . concat ( internals . stringify ( obj [ key ] , prefix + '[' + key + ']' , generateArrayPrefix ) ) ;
49
57
}
50
58
}
51
59
@@ -57,7 +65,6 @@ module.exports = function (obj, options) {
57
65
58
66
options = options || { } ;
59
67
var delimiter = typeof options . delimiter === 'undefined' ? internals . delimiter : options . delimiter ;
60
- options . indices = typeof options . indices === 'boolean' ? options . indices : internals . indices ;
61
68
62
69
var keys = [ ] ;
63
70
@@ -67,10 +74,23 @@ module.exports = function (obj, options) {
67
74
return '' ;
68
75
}
69
76
77
+ var arrayFormat ;
78
+ if ( options . arrayFormat in internals . arrayPrefixGenerators ) {
79
+ arrayFormat = options . arrayFormat ;
80
+ }
81
+ else if ( 'indices' in options ) {
82
+ arrayFormat = options . indices ? 'indices' : 'repeat' ;
83
+ }
84
+ else {
85
+ arrayFormat = 'indices' ;
86
+ }
87
+
88
+ var generateArrayPrefix = internals . arrayPrefixGenerators [ arrayFormat ] ;
89
+
70
90
var objKeys = Object . keys ( obj ) ;
71
91
for ( var i = 0 , il = objKeys . length ; i < il ; ++ i ) {
72
92
var key = objKeys [ i ] ;
73
- keys = keys . concat ( internals . stringify ( obj [ key ] , key , options ) ) ;
93
+ keys = keys . concat ( internals . stringify ( obj [ key ] , key , generateArrayPrefix ) ) ;
74
94
}
75
95
76
96
return keys . join ( delimiter ) ;
0 commit comments