object-keys-mapping
Version:
mapping object keys
98 lines (81 loc) • 1.81 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _util = require('./util');
var isArray = Array.isArray;
var keys = Object.keys;
/**
* @param {Object|Array} origin
* @param {Function} ignore
*/
function trim(origin) {
var ignore = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultIgnore;
if (!(0, _util.isObject)(origin)) {
return {};
}
if (isArray(origin)) {
return trimArray(origin, ignore);
} else {
return trimObject(origin, ignore);
}
}
/**
* @param {Array} origin
* @param {Function} ignore
* @return {Array}
*/
function trimArray(origin, ignore) {
var result = [];
origin.forEach(function (item) {
if (ignore(item)) {
return;
}
if (isArray(item)) {
var arr = trimArray(item, ignore);
if (arr.length) {
result.push(arr);
}
} else if ((0, _util.isObject)(item)) {
var obj = trimObject(item, ignore);
if (keys(obj).length) {
result.push(obj);
}
} else {
result.push(item);
}
});
return result;
}
/**
* @param {Object} origin
* @param {Function} ignore
* @return {Object}
*/
function trimObject(origin, ignore) {
var result = {};
keys(origin).forEach(function (key) {
var value = origin[key];
if (ignore(value)) {
return;
}
if (isArray(value)) {
var arr = trimArray(value, ignore);
if (arr.length) {
result[key] = arr;
}
} else if ((0, _util.isObject)(value)) {
var obj = trimObject(value, ignore);
if (keys(obj).length) {
result[key] = obj;
}
} else {
result[key] = value;
}
});
return result;
}
function defaultIgnore(v) {
return v === null || v === undefined || v === '';
}
exports.default = trim;