minimize.js 636 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. 'use strict';
  2. const { isPOJO } = require('../utils');
  3. module.exports = minimize;
  4. /**
  5. * Minimizes an object, removing undefined values and empty objects
  6. *
  7. * @param {Object} object to minimize
  8. * @return {Object|undefined}
  9. * @api private
  10. */
  11. function minimize(obj) {
  12. const keys = Object.keys(obj);
  13. let i = keys.length;
  14. let hasKeys;
  15. let key;
  16. let val;
  17. while (i--) {
  18. key = keys[i];
  19. val = obj[key];
  20. if (isPOJO(val)) {
  21. obj[key] = minimize(val);
  22. }
  23. if (undefined === obj[key]) {
  24. delete obj[key];
  25. continue;
  26. }
  27. hasKeys = true;
  28. }
  29. return hasKeys
  30. ? obj
  31. : undefined;
  32. }