@ali-i18n-fe/dada-component
Version:
65 lines (62 loc) • 2.04 kB
JavaScript
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