From b346519f6fa1dcc8bb8df4c90ac031b2908dbe09 Mon Sep 17 00:00:00 2001 From: Eli Doran Date: Sat, 17 Dec 2016 07:27:05 -0500 Subject: [PATCH 1/3] speedup array work by using push instead of concat --- lib/parse.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/parse.js b/lib/parse.js index 97387a6a..c5973068 100755 --- a/lib/parse.js +++ b/lib/parse.js @@ -32,8 +32,14 @@ var parseValues = function parseValues(str, options) { key = options.decoder(part.slice(0, pos)); val = options.decoder(part.slice(pos + 1)); } + if (has.call(obj, key)) { - obj[key] = [].concat(obj[key]).concat(val); + var cur = obj[key]; + if (Array.isArray(cur)) { + cur.push(val); + } else { + obj[key] = [cur, val]; + } } else { obj[key] = val; } From 0b2eda959e6398ccafbe6ec432e2efc4b91fa201 Mon Sep 17 00:00:00 2001 From: Eli Doran Date: Mon, 19 Dec 2016 09:47:52 -0500 Subject: [PATCH 2/3] move array combine to its own function in utils --- lib/parse.js | 7 +------ lib/utils.js | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/lib/parse.js b/lib/parse.js index c5973068..0085ef67 100755 --- a/lib/parse.js +++ b/lib/parse.js @@ -34,12 +34,7 @@ var parseValues = function parseValues(str, options) { } if (has.call(obj, key)) { - var cur = obj[key]; - if (Array.isArray(cur)) { - cur.push(val); - } else { - obj[key] = [cur, val]; - } + obj[key] = utils.combine(obj[key], val); } else { obj[key] = val; } diff --git a/lib/utils.js b/lib/utils.js index 33c01c00..53f32d9e 100755 --- a/lib/utils.js +++ b/lib/utils.js @@ -178,3 +178,23 @@ exports.isBuffer = function (obj) { return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj)); }; + +exports.combine = function combine(a, b) { + // we always use both of these, so, let's calculate them now + var firstIsArray = Array.isArray(a); + var secondIsArray = Array.isArray(b); + + // mutate `a` to append `b` and then return it + if (firstIsArray) { + secondIsArray ? a.push.apply(a, b) : a.push(b); + return a; + } + + // mutate `b` to prepend `a` and then return it + if (secondIsArray) { + b.unshift(a); + return b; + } + + return [a, b]; +}; From 9c6f0b13c558f097320f7a4d64941c7e6a28388d Mon Sep 17 00:00:00 2001 From: Eli Doran Date: Mon, 19 Dec 2016 10:41:31 -0500 Subject: [PATCH 3/3] add missing comment --- lib/utils.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/utils.js b/lib/utils.js index efe7465d..11eadd42 100755 --- a/lib/utils.js +++ b/lib/utils.js @@ -196,5 +196,6 @@ exports.combine = function combine(a, b) { return b; } + // neither are arrays, so, create a new array with both return [a, b]; };