mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-01 07:47:49 +00:00
Ensure cloneByPath preserves uncloneable values. [closes #3203]
This commit is contained in:
@@ -171,7 +171,9 @@ function baseConvert(util, name, func, options) {
|
||||
'curry': util.curry,
|
||||
'forEach': util.forEach,
|
||||
'isArray': util.isArray,
|
||||
'isError': util.isError,
|
||||
'isFunction': util.isFunction,
|
||||
'isWeakMap': util.isWeakMap,
|
||||
'iteratee': util.iteratee,
|
||||
'keys': util.keys,
|
||||
'rearg': util.rearg,
|
||||
@@ -185,7 +187,9 @@ function baseConvert(util, name, func, options) {
|
||||
curry = helpers.curry,
|
||||
each = helpers.forEach,
|
||||
isArray = helpers.isArray,
|
||||
isError = helpers.isError,
|
||||
isFunction = helpers.isFunction,
|
||||
isWeakMap = helpers.isWeakMap,
|
||||
keys = helpers.keys,
|
||||
rearg = helpers.rearg,
|
||||
toInteger = helpers.toInteger,
|
||||
@@ -355,8 +359,9 @@ function baseConvert(util, name, func, options) {
|
||||
var key = path[index],
|
||||
value = nested[key];
|
||||
|
||||
if (value != null) {
|
||||
nested[path[index]] = clone(index == lastIndex ? value : Object(value));
|
||||
if (value != null &&
|
||||
!(isFunction(value) || isError(value) || isWeakMap(value))) {
|
||||
nested[key] = clone(index == lastIndex ? value : Object(value));
|
||||
}
|
||||
nested = nested[key];
|
||||
}
|
||||
|
||||
@@ -5,7 +5,9 @@ module.exports = {
|
||||
'curry': require('../curry'),
|
||||
'forEach': require('../_arrayEach'),
|
||||
'isArray': require('../isArray'),
|
||||
'isError': require('../isError'),
|
||||
'isFunction': require('../isFunction'),
|
||||
'isWeakMap': require('../isWeakMap'),
|
||||
'iteratee': require('../iteratee'),
|
||||
'keys': require('../_baseKeys'),
|
||||
'rearg': require('../rearg'),
|
||||
|
||||
@@ -2138,6 +2138,16 @@
|
||||
assert.strictEqual(typeof actual.a.b, 'number');
|
||||
});
|
||||
|
||||
QUnit.test('should not convert uncloneables to objects', function(assert) {
|
||||
assert.expect(2);
|
||||
|
||||
var object = { 'a': { 'b': _.constant(true) } },
|
||||
actual = fp.update('a.b')(_.identity)(object);
|
||||
|
||||
assert.strictEqual(typeof object.a.b, 'function')
|
||||
assert.strictEqual(object.a.b, actual.a.b);
|
||||
});
|
||||
|
||||
QUnit.test('should not mutate values', function(assert) {
|
||||
assert.expect(2);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user