Ensure _.omit doesn’t mutate object with deep paths. [closes #2912]

This commit is contained in:
John-David Dalton
2016-12-30 18:09:11 -06:00
parent a23b918bef
commit e33b15674d
2 changed files with 12 additions and 2 deletions

View File

@@ -5632,8 +5632,8 @@
* @param {string} key The key of the property to inspect. * @param {string} key The key of the property to inspect.
* @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`. * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.
*/ */
function customOmitClone(value, key) { function customOmitClone(value) {
return (key !== undefined && isPlainObject(value)) ? undefined : value; return isPlainObject(value) ? undefined : value;
} }
/** /**

View File

@@ -16450,6 +16450,16 @@
assert.deepEqual(_.omit(object, args), { 'b': 2, 'd': 4 }); assert.deepEqual(_.omit(object, args), { 'b': 2, 'd': 4 });
}); });
QUnit.test('should not mutate `object`', function(assert) {
assert.expect(4);
lodashStable.each(['a', ['a'], 'a.b', ['a.b']], function(path) {
var object = { 'a': { 'b': 2 } };
_.omit(object, path);
assert.deepEqual(object, { 'a': { 'b': 2 } });
});
});
}()); }());
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/