From 548d155c37b160f28d7877c66932b7b8ca0a11fa Mon Sep 17 00:00:00 2001 From: Gibran Rodriguez Date: Fri, 8 Feb 2019 16:20:14 -0500 Subject: [PATCH 1/7] Delete empty object keys ommited already --- index.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/index.js b/index.js index 45ea75a..470b067 100644 --- a/index.js +++ b/index.js @@ -33,8 +33,14 @@ module.exports = function omitDeep(value, keys) { for (var key in value) { if (value.hasOwnProperty(key)) { + var valueKeys = Object.keys(value[key]); value[key] = omitDeep(value[key], keys); + //if value[key] is {} and the key was omitted delete + // the whole key from parent + if(Object.entries(value[key]).length === 0 && + keys.some(v => valueKeys.includes(v))) delete value[key] } + } return value; From 5780c498946aa8d54ab7b31426bc4f925de28afe Mon Sep 17 00:00:00 2001 From: Gibran Rodriguez Date: Fri, 8 Feb 2019 16:41:00 -0500 Subject: [PATCH 2/7] safty checkes --- index.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/index.js b/index.js index 470b067..85aecfa 100644 --- a/index.js +++ b/index.js @@ -33,12 +33,12 @@ module.exports = function omitDeep(value, keys) { for (var key in value) { if (value.hasOwnProperty(key)) { - var valueKeys = Object.keys(value[key]); + var valueKeys = value[key] && Object.keys(value[key]); value[key] = omitDeep(value[key], keys); //if value[key] is {} and the key was omitted delete // the whole key from parent - if(Object.entries(value[key]).length === 0 && - keys.some(v => valueKeys.includes(v))) delete value[key] + if(value[key] && Object.entries(value[key]).length === 0 && + keys.some(v => valueKeys && valueKeys.includes(v))) delete value[key] } } From 13b75a2b18bc92b3b8ccb4075f3d36e0cc5e3835 Mon Sep 17 00:00:00 2001 From: Gibran Rodriguez Date: Mon, 11 Feb 2019 11:52:11 -0500 Subject: [PATCH 3/7] option to cleanEmpty object as result of omit --- index.js | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/index.js b/index.js index 85aecfa..5179716 100644 --- a/index.js +++ b/index.js @@ -3,7 +3,16 @@ var isObject = require('is-plain-object'); var unset = require('unset-value'); -module.exports = function omitDeep(value, keys) { +function isEmptyObject(obj) { + for (var k in obj) { + if (obj.hasOwnProperty(k)) { + return false; + } + } + return true; +} + +module.exports = function omitDeep(value, keys, opts) { if (typeof value === 'undefined') { return {}; } @@ -33,14 +42,18 @@ module.exports = function omitDeep(value, keys) { for (var key in value) { if (value.hasOwnProperty(key)) { - var valueKeys = value[key] && Object.keys(value[key]); + var keyIsObj = isObject(value[key]); + + if (keyIsObj && isEmptyObject(value[key])) { + continue; + } + value[key] = omitDeep(value[key], keys); - //if value[key] is {} and the key was omitted delete - // the whole key from parent - if(value[key] && Object.entries(value[key]).length === 0 && - keys.some(v => valueKeys && valueKeys.includes(v))) delete value[key] - } + if (opts.cleanEmpty && keyIsObj && isEmptyObject(value[key])) { + unset(value, key); + } + } } return value; From 5ae84feb4de13b1483d5de336ecd24d16e159851 Mon Sep 17 00:00:00 2001 From: Gibran Rodriguez Date: Mon, 11 Feb 2019 12:47:43 -0500 Subject: [PATCH 4/7] check for possible opts --- index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/index.js b/index.js index 5179716..98b959c 100644 --- a/index.js +++ b/index.js @@ -13,6 +13,7 @@ function isEmptyObject(obj) { } module.exports = function omitDeep(value, keys, opts) { + const opts = opts || {}; if (typeof value === 'undefined') { return {}; } @@ -50,7 +51,7 @@ module.exports = function omitDeep(value, keys, opts) { value[key] = omitDeep(value[key], keys); - if (opts.cleanEmpty && keyIsObj && isEmptyObject(value[key])) { + if (opts && opts.cleanEmpty && keyIsObj && isEmptyObject(value[key])) { unset(value, key); } } From d9fdcd88e07dc8f165015cb3f0fa2d5c73fe9896 Mon Sep 17 00:00:00 2001 From: Gibran Rodriguez Date: Mon, 11 Feb 2019 12:54:27 -0500 Subject: [PATCH 5/7] check option --- index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/index.js b/index.js index 98b959c..c3541eb 100644 --- a/index.js +++ b/index.js @@ -13,7 +13,6 @@ function isEmptyObject(obj) { } module.exports = function omitDeep(value, keys, opts) { - const opts = opts || {}; if (typeof value === 'undefined') { return {}; } From 105e1293c9457517530caa860f43ccf75f256d09 Mon Sep 17 00:00:00 2001 From: Gibran Rodriguez Date: Mon, 11 Feb 2019 14:15:25 -0500 Subject: [PATCH 6/7] {} default --- index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/index.js b/index.js index c3541eb..eb55faa 100644 --- a/index.js +++ b/index.js @@ -13,6 +13,7 @@ function isEmptyObject(obj) { } module.exports = function omitDeep(value, keys, opts) { + opts = opts || {}; if (typeof value === 'undefined') { return {}; } @@ -50,7 +51,7 @@ module.exports = function omitDeep(value, keys, opts) { value[key] = omitDeep(value[key], keys); - if (opts && opts.cleanEmpty && keyIsObj && isEmptyObject(value[key])) { + if (opts.cleanEmpty && keyIsObj && isEmptyObject(value[key])) { unset(value, key); } } From 3727e48ecdbd58cb50a2a8aba1911f8d2c9fdde9 Mon Sep 17 00:00:00 2001 From: Gibran Rodriguez Date: Mon, 11 Feb 2019 14:37:05 -0500 Subject: [PATCH 7/7] Add a test --- test.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test.js b/test.js index be47aac..3fad259 100644 --- a/test.js +++ b/test.js @@ -82,4 +82,10 @@ describe('.omit()', function() { 'numbers': ['1', '2'] }); }); + + it('should delete object of empty values as a result of using the cleanEmtpy option ', function() { + var obj = { foo: { bar: 'baz' }, fizz: {} }; + omitDeep(obj, 'bar', {cleanEmpty: true}); + assert.deepEqual(obj, { fizz: {} }); + }); });