Skip to content

Instantly share code, notes, and snippets.

@petsel
Created October 24, 2018 17:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save petsel/0fd613b43df6baff0b0e4bdaa7d8f169 to your computer and use it in GitHub Desktop.
Save petsel/0fd613b43df6baff0b0e4bdaa7d8f169 to your computer and use it in GitHub Desktop.
// file "Object.getMaxDepth.js"
const Object = global.Object;
const object_prototype_toString = Object.prototype.toString;
const object_keys = Object.keys;
const math_max = global.Math.max;
const isArray = global.Array.isArray;
const isFiniteNumber = global.Number.isFinite;
function exposeInternalClassSignature (type) {
return object_prototype_toString.call(type);
}
function isObject (type) {
return (type && (typeof type === 'object'));
}
function isString (type) {
return (/^\[object\s+String\]$/).test(exposeInternalClassSignature(type));
// return ((typeof type === 'string') || (/^\[object\s+String\]$/).test(exposeInternalClassSignature(type)));
}
function isNumber (type) {
return ((typeof type === 'number') || (/^\[object\s+Number\]$/).test(exposeInternalClassSignature(type)));
}
function isSafeNumber (type) {
return (isNumber(type) && isFiniteNumber(type));
}
function getMaximumObjectLevelCount (type, count, maxCount) {
if (!isObject(type)) {
maxCount = (void 0);
} else if (!isArray(type) && !isString(type)) {
count = isSafeNumber(count) ? count : 0;
maxCount = isSafeNumber(maxCount) ? maxCount : 0;
const keyList = object_keys(type);
let keyListIdx = keyList.length;
if (keyListIdx >= 1) {
++count;
while (keyListIdx--) {
maxCount = math_max(count, getMaximumObjectLevelCount(type[keyList[keyListIdx]], count, maxCount));
}
}
} else {
maxCount = 0;
}
return maxCount;
}
export default (Object.getMaxDepth = getMaximumObjectLevelCount);
// const obj = {
// level__1_A: {
// level__1_A__2_A: {
// level__1_A__2_A__3_A: 'level__1_A__2_A__3_A',
// level__1_A__2_A__3_B: 'level__1_A__2_A__3_B',
// level__1_A__2_A__3_C: {
// level__1_A__2_A__3_C__4_A: 'level__1_A__2_A__3_C__4_A',
// level__1_A__2_A__3_C__4_B: 'level__1_A__2_A__3_C__4_B',
// level__1_A__2_A__3_C__4_C: 'level__1_A__2_A__3_C__4_C'
// },
// level__1_A__2_A__3_D: 'level__1_A__2_A__3_D'
// },
// level__1_A__2_B: {
// level__1_A__2_B__3_A: 'level__1_A__2_B__3_A',
// level__1_A__2_B__3_B: 'level__1_A__2_B__3_B'
// }
// },
// level__1_B: {
// level__1_B__2_A: {
// level__1_B__2_A__3_A: {
// level__1_B__2_A__3_A__4A: {
// level__1_B__2_A__3_A__4A__5A: 'level__1_B__2_A__3_A__4A__5A'
// },
// level__1_B__2_A__3_A__4B: 'level__1_B__2_A__3_A__4B'
// },
// level__1_B__2_A__3_B: 'level__1_B__2_A__3_B'
// },
// level__1_B__2_B: {
// level__1_B__2_B__3_A: 'level__1_B__2_B__3_A',
// level__1_B__2_B__3_B: 'level__1_B__2_B__3_B'
// }
// }
// };
//
// global.console.log('Object.getMaxDepth(obj) : ', Object.getMaxDepth(obj)); // 5
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment