update-deep-copy
Version:
Deep copy and update object
36 lines (27 loc) • 1.14 kB
JavaScript
;
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
var clone = require("lodash.clonedeep");
module.exports = function (object, changeSet) {
var cloneObject = clone(object);
return changeSet ? update(cloneObject, changeSet) : cloneObject;
};
function update(obj, changeSet) {
var updateReduce = function updateReduce(state, key) {
var change = changeSet[key];
if (typeof change === "undefined") {
delete state[key];
return state;
}
if (!change) {
state[key] = change;
return state;
}
if (_typeof(change) === "object" && !Array.isArray(change)) {
state[key] = update(state[key], change);
return state;
}
state[key] = clone(change);
return state;
};
return Object.keys(changeSet).reduce(updateReduce, obj || {});
}