sizeof.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. var isArr = require('./isArr');
  2. var keys = require('./keys');
  3. var isBuffer = require('./isBuffer');
  4. var isNull = require('./isNull');
  5. var strSize = 2;
  6. var boolSize = 4;
  7. var numSize = 8;
  8. exports = function(obj) {
  9. return sizeof(obj, {
  10. values: []
  11. });
  12. };
  13. function sizeof(obj, _ref) {
  14. var values = _ref.values;
  15. var t = typeof obj;
  16. if (t === 'string') return obj.length * strSize;
  17. if (t === 'number') return numSize;
  18. if (t === 'boolean') return boolSize;
  19. var size = 0;
  20. if (t === 'object' && !isNull(obj)) {
  21. if (values.indexOf(obj) > -1) {
  22. return 0;
  23. }
  24. values.push(obj);
  25. if (isArr(obj)) {
  26. for (var i = 0, len = obj.length; i < len; i++) {
  27. size += sizeof(obj[i], {
  28. values: values
  29. });
  30. }
  31. } else {
  32. var _keys = keys(obj);
  33. for (var _i = 0, _len = _keys.length; _i < _len; _i++) {
  34. var key = _keys[_i];
  35. size += key.length * strSize;
  36. size += sizeof(obj[key], {
  37. values: values
  38. });
  39. }
  40. }
  41. }
  42. if (isBuffer(obj)) return obj.length;
  43. return size;
  44. }
  45. module.exports = exports;