From 61ddad1314824ac32bb2eadd88c44df53ab4792c Mon Sep 17 00:00:00 2001 From: cjihrig Date: Sat, 19 Jul 2014 01:27:34 -0400 Subject: [PATCH] querystring: do not add sep for empty array Currently, stringification of an empty array outputs a single separator character. This commit causes an empty array to output the empty string. Signed-off-by: Fedor Indutny --- lib/querystring.js | 23 +++++++++++++---------- test/simple/test-querystring.js | 7 +++++-- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/lib/querystring.js b/lib/querystring.js index aa3f3c7..369316c 100644 --- a/lib/querystring.js +++ b/lib/querystring.js @@ -128,9 +128,6 @@ var stringifyPrimitive = function(v) { QueryString.stringify = QueryString.encode = function(obj, sep, eq, options) { sep = sep || '&'; eq = eq || '='; - if (util.isNull(obj)) { - obj = undefined; - } var encode = QueryString.escape; if (options && typeof options.encodeURIComponent === 'function') { @@ -138,16 +135,22 @@ QueryString.stringify = QueryString.encode = function(obj, sep, eq, options) { } if (util.isObject(obj)) { - return Object.keys(obj).map(function(k) { + var keys = Object.keys(obj); + var fields = []; + + for (var i = 0; i < keys.length; i++) { + var k = keys[i]; + var v = obj[k]; var ks = encode(stringifyPrimitive(k)) + eq; - if (util.isArray(obj[k])) { - return obj[k].map(function(v) { - return ks + encode(stringifyPrimitive(v)); - }).join(sep); + + if (util.isArray(v)) { + for (var j = 0; j < v.length; j++) + fields.push(ks + encode(stringifyPrimitive(v[j]))); } else { - return ks + encode(stringifyPrimitive(obj[k])); + fields.push(ks + encode(stringifyPrimitive(v))); } - }).join(sep); + } + return fields.join(sep); } return ''; }; diff --git a/test/simple/test-querystring.js b/test/simple/test-querystring.js index 3cee808..c6390d7 100644 --- a/test/simple/test-querystring.js +++ b/test/simple/test-querystring.js @@ -57,7 +57,9 @@ var qsTestCases = [ valueOf: 'bar', __defineGetter__: 'baz' }], // See: https://github.com/joyent/node/issues/3058 - ['foo&bar=baz', 'foo=&bar=baz', { foo: '', bar: 'baz' }] + ['foo&bar=baz', 'foo=&bar=baz', { foo: '', bar: 'baz' }], + [null, '', {}], + [undefined, '', {}] ]; // [ wonkyQS, canonicalQS, obj ] @@ -87,7 +89,8 @@ var qsWeirdObjects = [ [{f: false, t: true}, 'f=false&t=true', {'f': 'false', 't': 'true'}], [{n: null}, 'n=', {'n': ''}], [{nan: NaN}, 'nan=', {'nan': ''}], - [{inf: Infinity}, 'inf=', {'inf': ''}] + [{inf: Infinity}, 'inf=', {'inf': ''}], + [{a: [], b: []}, '', {}] ]; // }}} -- 2.7.4