Initial commit
This commit is contained in:
45
node/TestCli/node_modules/map-obj/index.js
generated
vendored
Normal file
45
node/TestCli/node_modules/map-obj/index.js
generated
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
'use strict';
|
||||
|
||||
// customized for this use-case
|
||||
const isObject = x =>
|
||||
typeof x === 'object' &&
|
||||
x !== null &&
|
||||
!(x instanceof RegExp) &&
|
||||
!(x instanceof Error) &&
|
||||
!(x instanceof Date);
|
||||
|
||||
module.exports = function mapObj(obj, fn, opts, seen) {
|
||||
opts = Object.assign({
|
||||
deep: false,
|
||||
target: {}
|
||||
}, opts);
|
||||
|
||||
seen = seen || new WeakMap();
|
||||
|
||||
if (seen.has(obj)) {
|
||||
return seen.get(obj);
|
||||
}
|
||||
|
||||
seen.set(obj, opts.target);
|
||||
|
||||
const target = opts.target;
|
||||
delete opts.target;
|
||||
|
||||
for (const key of Object.keys(obj)) {
|
||||
const val = obj[key];
|
||||
const res = fn(key, val, obj);
|
||||
let newVal = res[1];
|
||||
|
||||
if (opts.deep && isObject(newVal)) {
|
||||
if (Array.isArray(newVal)) {
|
||||
newVal = newVal.map(x => isObject(x) ? mapObj(x, fn, opts, seen) : x);
|
||||
} else {
|
||||
newVal = mapObj(newVal, fn, opts, seen);
|
||||
}
|
||||
}
|
||||
|
||||
target[res[0]] = newVal;
|
||||
}
|
||||
|
||||
return target;
|
||||
};
|
||||
Reference in New Issue
Block a user