mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-09 02:17:50 +00:00
Add customOmitClone helper.
This commit is contained in:
108
lodash.js
108
lodash.js
@@ -2464,24 +2464,6 @@
|
|||||||
return shuffleSelf(copyArray(array));
|
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
|
* This function is like `assignValue` except that it doesn't assign
|
||||||
* `undefined` values.
|
* `undefined` values.
|
||||||
@@ -5606,6 +5588,63 @@
|
|||||||
return setWrapToString(setter(result, newData), func, bitmask);
|
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
|
* A specialized version of `baseIsEqualDeep` for arrays with support for
|
||||||
* partial deep comparisons.
|
* partial deep comparisons.
|
||||||
@@ -6503,29 +6542,6 @@
|
|||||||
return data;
|
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
|
* This function is like
|
||||||
* [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
|
* [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
|
||||||
@@ -12781,7 +12797,7 @@
|
|||||||
* // => { 'a': 1, 'b': 2 }
|
* // => { 'a': 1, 'b': 2 }
|
||||||
*/
|
*/
|
||||||
var defaults = baseRest(function(args) {
|
var defaults = baseRest(function(args) {
|
||||||
args.push(undefined, assignInDefaults);
|
args.push(undefined, customDefaultsAssignIn);
|
||||||
return apply(assignInWith, undefined, args);
|
return apply(assignInWith, undefined, args);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -12805,7 +12821,7 @@
|
|||||||
* // => { 'a': { 'b': 2, 'c': 3 } }
|
* // => { 'a': { 'b': 2, 'c': 3 } }
|
||||||
*/
|
*/
|
||||||
var defaultsDeep = baseRest(function(args) {
|
var defaultsDeep = baseRest(function(args) {
|
||||||
args.push(undefined, mergeDefaults);
|
args.push(undefined, customDefaultsMerge);
|
||||||
return apply(mergeWith, undefined, args);
|
return apply(mergeWith, undefined, args);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -13467,7 +13483,7 @@
|
|||||||
});
|
});
|
||||||
copyObject(object, getAllKeysIn(object), result);
|
copyObject(object, getAllKeysIn(object), result);
|
||||||
if (isDeep) {
|
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;
|
var length = paths.length;
|
||||||
while (length--) {
|
while (length--) {
|
||||||
@@ -14735,9 +14751,9 @@
|
|||||||
options = undefined;
|
options = undefined;
|
||||||
}
|
}
|
||||||
string = toString(string);
|
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),
|
importsKeys = keys(imports),
|
||||||
importsValues = baseValues(imports, importsKeys);
|
importsValues = baseValues(imports, importsKeys);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user