mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-01 23:57:49 +00:00
Ensure _.merge deep clones array/typed-array/plain-object sources. [closes #1987]
This commit is contained in:
@@ -3081,7 +3081,7 @@
|
||||
}
|
||||
else {
|
||||
isCommon = false;
|
||||
newValue = baseClone(srcValue);
|
||||
newValue = baseClone(srcValue, true);
|
||||
}
|
||||
}
|
||||
else if (isPlainObject(srcValue) || isArguments(srcValue)) {
|
||||
@@ -3090,10 +3090,10 @@
|
||||
}
|
||||
else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) {
|
||||
isCommon = false;
|
||||
newValue = baseClone(srcValue);
|
||||
newValue = baseClone(srcValue, true);
|
||||
}
|
||||
else {
|
||||
newValue = srcIndex ? baseClone(objValue) : objValue;
|
||||
newValue = objValue;
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
||||
22
test/test.js
22
test/test.js
@@ -13937,15 +13937,27 @@
|
||||
assert.deepEqual(actual.a, [[3, 4, 3]]);
|
||||
});
|
||||
|
||||
QUnit.test('should shallow clone array/typed-array/plain-object sources', function(assert) {
|
||||
QUnit.test('should deep clone array/typed-array/plain-object sources', function(assert) {
|
||||
assert.expect(1);
|
||||
|
||||
var values = [[], new (Uint8Array || Object), {}],
|
||||
var typedArray = Uint8Array
|
||||
? new Uint8Array(new ArrayBuffer(2))
|
||||
: { 'buffer': [0, 0] };
|
||||
|
||||
var props = ['0', 'a', 'buffer'],
|
||||
values = [[{ 'a': 1 }], { 'a': [1] }, typedArray],
|
||||
expected = lodashStable.map(values, alwaysTrue);
|
||||
|
||||
var actual = lodashStable.map(values, function(value) {
|
||||
var object = _.merge({}, { 'value': value });
|
||||
return object.value !== value && lodashStable.isEqual(object.value, value);
|
||||
var actual = lodashStable.map(values, function(value, index) {
|
||||
var key = props[index],
|
||||
object = _.merge({}, { 'value': value }),
|
||||
newValue = object.value;
|
||||
|
||||
return (
|
||||
newValue !== value &&
|
||||
newValue[key] !== value[key] &&
|
||||
lodashStable.isEqual(newValue, value)
|
||||
);
|
||||
});
|
||||
|
||||
assert.deepEqual(actual, expected);
|
||||
|
||||
Reference in New Issue
Block a user