Skip to content

Commit 22a07cc

Browse files
committed
Speed up Lib.extendDeep (_extend) for primitive arrays
(cherry picked from commit 25d5cec)
1 parent 0dc3613 commit 22a07cc

File tree

1 file changed

+24
-1
lines changed

1 file changed

+24
-1
lines changed

src/lib/extend.js

+24-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,18 @@
1212
var isPlainObject = require('./is_plain_object.js');
1313
var isArray = Array.isArray;
1414

15+
function primitivesLoopSplice(source, target) {
16+
var i, value;
17+
for(i = 0; i < source.length; i++) {
18+
value = source[i];
19+
if(value !== null && typeof(value) === 'object') {
20+
return false;
21+
}
22+
target.push(value);
23+
}
24+
return true;
25+
}
26+
1527
exports.extendFlat = function() {
1628
return _extend(arguments, false, false);
1729
};
@@ -45,7 +57,18 @@ function _extend(inputs, isDeep, keepAllKeys) {
4557
var target = inputs[0],
4658
length = inputs.length;
4759

48-
var input, key, src, copy, copyIsArray, clone;
60+
var input, key, src, copy, copyIsArray, clone, allPrimitives;
61+
62+
if(length === 2 && isArray(target) && isArray(inputs[1]) && target.length === 0) {
63+
64+
allPrimitives = primitivesLoopSplice(inputs[1], target);
65+
66+
if(allPrimitives) {
67+
return target;
68+
} else {
69+
target.splice(0, target.length); // reset target and continue to next block
70+
}
71+
}
4972

5073
for(var i = 1; i < length; i++) {
5174
input = inputs[i];

0 commit comments

Comments
 (0)