UNPKG

utilja

Version:

util for js

56 lines (54 loc) 1.78 kB
/* * Copyright (c) JinLiwei 2022-present */ /** * * @param obj obj traversed * @param objContainer objContainer containing obj * @param key key for obj * @param level obj level relative to root * @param nullCallback called when obj is null or undefined * @param arrayCallback called when obj is array * @param objCallback called when obj is object * @param primitiveCallback called when obj is primitive */ function traverse(obj, objContainer, key, level, {nullCallback, arrayCallback, objCallback, primitiveCallback}) { if (obj === null || obj === undefined) { if (typeof nullCallback === 'function') { nullCallback(obj, objContainer, key, level); } return; } if (Array.isArray(obj)) { if (typeof arrayCallback === 'function') { arrayCallback(obj, objContainer, key, level); } for (let i = 0; i < obj.length; i++) { traverse(obj[i], obj, i, level + 1, {nullCallback, arrayCallback, objCallback, primitiveCallback}); } return; } if (typeof obj === 'object') { if (typeof objCallback === 'function') { objCallback(obj, objContainer, key, level); } let keys = Object.keys(obj); if (keys) { keys.forEach(itemKey => { traverse(obj[itemKey], obj, itemKey, level + 1, { nullCallback, arrayCallback, objCallback, primitiveCallback }); }); } return; } if (typeof primitiveCallback === 'function') { primitiveCallback(obj, objContainer, key, level); } } module.exports = { traverse }