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! ✌️