Array.isArray()
, Array.prototype.filter()
and Boolean
for arrays in order to avoid sparse arrays.Object.keys()
and Array.prototype.reduce()
to iterate over each key with an appropriate initial value.Boolean
to determine the truthiness of each key's value and add it to the accumulator if it's truthy.typeof
to determine if a given value is an object
and call the function again to deeply compact it.const compactObject = val => {
const data = Array.isArray(val) ? val.filter(Boolean) : val;
return Object.keys(data).reduce(
(acc, key) => {
const value = data[key];
if (Boolean(value))
acc[key] = typeof value === 'object' ? compactObject(value) : value;
return acc;
},
Array.isArray(val) ? [] : {}
);
};
const obj = { a: null, b: false, c: true, d: 0, e: 1, f: '', g: 'a', h: [null, false, '', true, 1, 'a'], i: { j: 0, k: false, l: 'a' } }; compactObject(obj); // { c: true, e: 1, g: 'a', h: [ true, 1, 'a' ], i: { l: 'a' } }
Subscribe to get resources directly to your inbox. You won't receive any spam! ✌️