mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-01-29 06:27:49 +00:00
Add customOmitClone helper.
This commit is contained in:
108
lodash.js
108
lodash.js
@@ -2464,24 +2464,6 @@
|
||||
return shuffleSelf(copyArray(array));
|
||||
}
|
||||
|
||||
/**
|
||||
* Used by `_.defaults` to customize its `_.assignIn` use.
|
||||
*
|
||||
* @private
|
||||
* @param {*} objValue The destination value.
|
||||
* @param {*} srcValue The source value.
|
||||
* @param {string} key The key of the property to assign.
|
||||
* @param {Object} object The parent object of `objValue`.
|
||||
* @returns {*} Returns the value to assign.
|
||||
*/
|
||||
function assignInDefaults(objValue, srcValue, key, object) {
|
||||
if (objValue === undefined ||
|
||||
(eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {
|
||||
return srcValue;
|
||||
}
|
||||
return objValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is like `assignValue` except that it doesn't assign
|
||||
* `undefined` values.
|
||||
@@ -5606,6 +5588,63 @@
|
||||
return setWrapToString(setter(result, newData), func, bitmask);
|
||||
}
|
||||
|
||||
/**
|
||||
* Used by `_.defaults` to customize its `_.assignIn` use to assign properties
|
||||
* of source objects to the destination object for all destination properties
|
||||
* that resolve to `undefined`.
|
||||
*
|
||||
* @private
|
||||
* @param {*} objValue The destination value.
|
||||
* @param {*} srcValue The source value.
|
||||
* @param {string} key The key of the property to assign.
|
||||
* @param {Object} object The parent object of `objValue`.
|
||||
* @returns {*} Returns the value to assign.
|
||||
*/
|
||||
function customDefaultsAssignIn(objValue, srcValue, key, object) {
|
||||
if (objValue === undefined ||
|
||||
(eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {
|
||||
return srcValue;
|
||||
}
|
||||
return objValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* Used by `_.defaultsDeep` to customize its `_.merge` use to merge source
|
||||
* objects into destination objects that are passed thru.
|
||||
*
|
||||
* @private
|
||||
* @param {*} objValue The destination value.
|
||||
* @param {*} srcValue The source value.
|
||||
* @param {string} key The key of the property to merge.
|
||||
* @param {Object} object The parent object of `objValue`.
|
||||
* @param {Object} source The parent object of `srcValue`.
|
||||
* @param {Object} [stack] Tracks traversed source values and their merged
|
||||
* counterparts.
|
||||
* @returns {*} Returns the value to assign.
|
||||
*/
|
||||
function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {
|
||||
if (isObject(objValue) && isObject(srcValue)) {
|
||||
// Recursively merge objects and arrays (susceptible to call stack limits).
|
||||
stack.set(srcValue, objValue);
|
||||
baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);
|
||||
stack['delete'](srcValue);
|
||||
}
|
||||
return objValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain
|
||||
* objects.
|
||||
*
|
||||
* @private
|
||||
* @param {*} value The value to inspect.
|
||||
* @param {string} key The key of the property to inspect.
|
||||
* @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.
|
||||
*/
|
||||
function customOmitClone(value, key) {
|
||||
return (key !== undefined && isPlainObject(value)) ? undefined : value;
|
||||
}
|
||||
|
||||
/**
|
||||
* A specialized version of `baseIsEqualDeep` for arrays with support for
|
||||
* partial deep comparisons.
|
||||
@@ -6503,29 +6542,6 @@
|
||||
return data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Used by `_.defaultsDeep` to customize its `_.merge` use.
|
||||
*
|
||||
* @private
|
||||
* @param {*} objValue The destination value.
|
||||
* @param {*} srcValue The source value.
|
||||
* @param {string} key The key of the property to merge.
|
||||
* @param {Object} object The parent object of `objValue`.
|
||||
* @param {Object} source The parent object of `srcValue`.
|
||||
* @param {Object} [stack] Tracks traversed source values and their merged
|
||||
* counterparts.
|
||||
* @returns {*} Returns the value to assign.
|
||||
*/
|
||||
function mergeDefaults(objValue, srcValue, key, object, source, stack) {
|
||||
if (isObject(objValue) && isObject(srcValue)) {
|
||||
// Recursively merge objects and arrays (susceptible to call stack limits).
|
||||
stack.set(srcValue, objValue);
|
||||
baseMerge(objValue, srcValue, undefined, mergeDefaults, stack);
|
||||
stack['delete'](srcValue);
|
||||
}
|
||||
return objValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is like
|
||||
* [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
|
||||
@@ -12781,7 +12797,7 @@
|
||||
* // => { 'a': 1, 'b': 2 }
|
||||
*/
|
||||
var defaults = baseRest(function(args) {
|
||||
args.push(undefined, assignInDefaults);
|
||||
args.push(undefined, customDefaultsAssignIn);
|
||||
return apply(assignInWith, undefined, args);
|
||||
});
|
||||
|
||||
@@ -12805,7 +12821,7 @@
|
||||
* // => { 'a': { 'b': 2, 'c': 3 } }
|
||||
*/
|
||||
var defaultsDeep = baseRest(function(args) {
|
||||
args.push(undefined, mergeDefaults);
|
||||
args.push(undefined, customDefaultsMerge);
|
||||
return apply(mergeWith, undefined, args);
|
||||
});
|
||||
|
||||
@@ -13467,7 +13483,7 @@
|
||||
});
|
||||
copyObject(object, getAllKeysIn(object), result);
|
||||
if (isDeep) {
|
||||
result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG);
|
||||
result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);
|
||||
}
|
||||
var length = paths.length;
|
||||
while (length--) {
|
||||
@@ -14735,9 +14751,9 @@
|
||||
options = undefined;
|
||||
}
|
||||
string = toString(string);
|
||||
options = assignInWith({}, options, settings, assignInDefaults);
|
||||
options = assignInWith({}, options, settings, customDefaultsAssignIn);
|
||||
|
||||
var imports = assignInWith({}, options.imports, settings.imports, assignInDefaults),
|
||||
var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),
|
||||
importsKeys = keys(imports),
|
||||
importsValues = baseValues(imports, importsKeys);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user