UNPKG

@ali-i18n-fe/dada-component

Version:
65 lines (62 loc) 2.04 kB
var { set, get, isArray } = require('lodash'); var addPath = function () { var paths = []; for (var _i = 0; _i < arguments.length; _i++) { paths[_i] = arguments[_i]; } return paths.join('.').replace(/^\./, ''); }; var forEachDeep = function (object, cb, options) { if (options === void 0) { options = {}; } var exceptFns = get(options, 'exceptFns', []); var isIncludeArray = get(options, 'isIncludeArray', false); var ruedObjects = new WeakSet(); var fn = function (path) { if (path === void 0) { path = ''; } var gotObject = path ? get(object, path) : object; if (!gotObject || typeof gotObject !== 'object') { return; } if (ruedObjects.has(gotObject)) { return; } ruedObjects.add(gotObject); cb(gotObject, path); if (!exceptFns.some(function (exceptFn) { return exceptFn(gotObject, path); }) && !isArray(gotObject)) { Object.keys(gotObject).forEach(function (key) { var value = gotObject[key]; if (typeof value !== 'object') { return; } if (isArray(value)) { if (isIncludeArray) { fn(addPath(path, key)); } value.forEach(function (tmp, ckey) { fn(addPath(path, key, ckey)); }); } else { fn(addPath(path, key)); } }); } }; return fn(); }; var mapDeep = function (object, cb, options) { if (options === void 0) { options = {}; } var newObject = object; forEachDeep(object, function (obj, path) { var result = cb(obj, path); if (!path) { newObject = result; } else { set(newObject, path, result); } }, options); return newObject; }; exports.mapDeep = mapDeep exports.forEachDeep = forEachDeep