mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-11 03:17: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 {
|
else {
|
||||||
isCommon = false;
|
isCommon = false;
|
||||||
newValue = baseClone(srcValue);
|
newValue = baseClone(srcValue, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (isPlainObject(srcValue) || isArguments(srcValue)) {
|
else if (isPlainObject(srcValue) || isArguments(srcValue)) {
|
||||||
@@ -3090,10 +3090,10 @@
|
|||||||
}
|
}
|
||||||
else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) {
|
else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) {
|
||||||
isCommon = false;
|
isCommon = false;
|
||||||
newValue = baseClone(srcValue);
|
newValue = baseClone(srcValue, true);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
newValue = srcIndex ? baseClone(objValue) : objValue;
|
newValue = objValue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|||||||
22
test/test.js
22
test/test.js
@@ -13937,15 +13937,27 @@
|
|||||||
assert.deepEqual(actual.a, [[3, 4, 3]]);
|
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);
|
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);
|
expected = lodashStable.map(values, alwaysTrue);
|
||||||
|
|
||||||
var actual = lodashStable.map(values, function(value) {
|
var actual = lodashStable.map(values, function(value, index) {
|
||||||
var object = _.merge({}, { 'value': value });
|
var key = props[index],
|
||||||
return object.value !== value && lodashStable.isEqual(object.value, value);
|
object = _.merge({}, { 'value': value }),
|
||||||
|
newValue = object.value;
|
||||||
|
|
||||||
|
return (
|
||||||
|
newValue !== value &&
|
||||||
|
newValue[key] !== value[key] &&
|
||||||
|
lodashStable.isEqual(newValue, value)
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
assert.deepEqual(actual, expected);
|
assert.deepEqual(actual, expected);
|
||||||
|
|||||||
Reference in New Issue
Block a user