Deep remove empty value from Object
by bc_rikko
HTML
<pre id="origin"></pre>
<pre id="expect"></pre>
<pre id="result"></pre>
JavaScript
const object = {
a: 1,
b: {
b1: 1,
b2: 'a',
b3: null,
b4: undefined,
b5: {
b51: 1,
b52: 'a',
b53: null,
b54: undefined,
b55: ''
}
},
c: ''
};
const expect = {
a: 1,
b: {
b1: 1,
b2: 'a',
b5: {
b51: 1,
b52: 'a'
}
}
};
function removeObjectBy(object, condition) {
// lodash#cloneDeep
const _obj = _.cloneDeep(object);
const _cond = typeof condition === 'function' ? condition : function () {};
function _remove (obj) {
for (let o in obj) {
if (typeof obj[o] === 'object') {
_remove(obj[o]);
}
if (_cond(obj[o])) {
delete obj[o];
}
}
}
_remove(_obj, _cond);
return _obj;
}
const isEmpty = val => val === '' || val === null || val === undefined;
const actual = removeObjectBy(object, isEmpty);
document.getElementById('origin').innerText = JSON.stringify(object, null, 2);
document.getElementById('expect').innerText = JSON.stringify(expect, null, 2);
document.getElementById('result').innerText = JSON.stringify(actual, null, 2);