mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-13 12:27:49 +00:00
Make _.defaults avoid accessing property values it doesn't need to. [closes #2983]
This commit is contained in:
32
lodash.js
32
lodash.js
@@ -12774,9 +12774,35 @@
|
|||||||
* _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
|
* _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
|
||||||
* // => { 'a': 1, 'b': 2 }
|
* // => { 'a': 1, 'b': 2 }
|
||||||
*/
|
*/
|
||||||
var defaults = baseRest(function(args) {
|
var defaults = baseRest(function(object, sources) {
|
||||||
args.push(undefined, customDefaultsAssignIn);
|
object = Object(object);
|
||||||
return apply(assignInWith, undefined, args);
|
|
||||||
|
var index = -1;
|
||||||
|
var length = sources.length;
|
||||||
|
var guard = length > 2 ? sources[2] : undefined;
|
||||||
|
|
||||||
|
if (guard && isIterateeCall(sources[0], sources[1], guard)) {
|
||||||
|
length = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (++index < length) {
|
||||||
|
var source = sources[index];
|
||||||
|
var props = keysIn(source);
|
||||||
|
var propsIndex = -1;
|
||||||
|
var propsLength = props.length;
|
||||||
|
|
||||||
|
while (++propsIndex < propsLength) {
|
||||||
|
var key = props[propsIndex];
|
||||||
|
var value = object[key];
|
||||||
|
|
||||||
|
if (value === undefined ||
|
||||||
|
(eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {
|
||||||
|
object[key] = source[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return object;
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user