Source:
function Isobj (x) {var type = typeof X;return x!== null && (type = = = ' object ' | | type = = = ' function ');} var hasownproperty = Object.prototype.hasownproperty;var propisenumerable = Object.prototype.propertyIsEnumerable; Function Toobject (val) {if (val = = = NULL | | val = = = undefined) {throw new TypeError (' cannot convert undefined or null to O Bject ');} Return Object (val);} function Assignkey (to, from, key) {var val = from[key];if (val = = = Undefined | | val = = = null) {return;} if (Hasownproperty.call (to, key)) {if (to[key] = = = Undefined | | to[key] = = null) {throw new TypeError (' cannot convert und Efined or Null to object (' + key + ') ');}} if (!hasownproperty.call (To, key) | |!isobj (val)) {To[key] = val;} else {To[key] = assign (Object (To[key]), From[key]);}} function assign (to, from) {if (to = =) {return to;} From = Object (the From), and for (Var key in from) {if (Hasownproperty.call (from, key)) {Assignkey (to, from, key);}} if (object.getownpropertysymbols) {var symbols = Object.getownpropertysymBols (from), for (var i = 0; i < symbols.length; i++) {if (Propisenumerable.call (from, Symbols[i])) {Assignkey (to, from, Symbols[i]);}}} return to;} function Deepassign (target) {target = Toobject (target); for (var s = 1; s < arguments.length; s++) {Assign (target, Argum Ents[s]);} return target;};
Call:
Deepassign ({A: {b:0}}, {A: {b:1, C:2}}, {A: {c:3}});//=> {A: {b:1, C:3}}
Pure native imitation ES6 object.assign for deep merging objects