Skip to content

Commit 624b64f

Browse files
authored
Merge pull request #732 from monfera/speed-up-extend
Speed up Lib.extendDeep (_extend) for arrays that have no object, array elements
2 parents 5547bbe + 363aba3 commit 624b64f

File tree

1 file changed

+26
-1
lines changed

1 file changed

+26
-1
lines changed

src/lib/extend.js

+26-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,20 @@
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+
if(value !== void(0)) {
23+
target[i] = value;
24+
}
25+
}
26+
return true;
27+
}
28+
1529
exports.extendFlat = function() {
1630
return _extend(arguments, false, false);
1731
};
@@ -45,7 +59,18 @@ function _extend(inputs, isDeep, keepAllKeys) {
4559
var target = inputs[0],
4660
length = inputs.length;
4761

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

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

0 commit comments

Comments
 (0)