Skip to content

Instantly share code, notes, and snippets.

@mohdovais
Last active February 18, 2020 21:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mohdovais/be3b86cb775577f008476bd5ca807d9c to your computer and use it in GitHub Desktop.
Save mohdovais/be3b86cb775577f008476bd5ca807d9c to your computer and use it in GitHub Desktop.
/**
* Assign nested properties from `copy` to `obj`
* @template O, C object and copy
* @param {O} obj The object to copy properties to
* @param {C} copy The object to copy properties from
* @returns {O & C} a new object
*/
function assign(obj, copy) {
var draft = {};
var O = Object;
var objectKeys = O.keys;
var isObject = object =>
O.prototype.toString.call(object) === "[object Object]";
objectKeys(obj).forEach(function(key) {
draft[key] = obj[key];
});
objectKeys(copy).forEach(function(key) {
var ck = copy[key];
var dk = draft[key];
draft[key] = isObject(ck) && isObject(dk) ? assign(dk, ck) : ck;
});
return draft;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment