We can find many discussions and solutions about this issue.
In my case the one that worked is this code.
Below you’ll find a compressed version of the extend()
function (with a fix):
1 | function extend(){ var r,t,n,o,e=arguments[0]||{},f=1,i=arguments.length,u=!1,y= function (r){ if ( null ===r|| "object" != typeof r||r.nodeType|| null !==r&&r===r.window) return !1; try { if (r.constructor&&! this .hasOwnProperty.call(r.constructor.prototype, "isPrototypeOf" )) return !1} catch (t){ return !1} return !0}; for ( "boolean" == typeof e&&(u=e,e=arguments[f]||{},f++), "object" != typeof e&& "function" != typeof e&&(e={}),!1;i>f;f+=1) if ( null !==(r=arguments[f])) for (t in r)e!==r[t]&& "undefined" == typeof e[t]&&(u&&r[t]&&(y(r[t])||(n=Array.isArray(r[t])))?(n?(n=!1,o=e[t]&&Array.isArray(e[t])?e[t]:[]):o=e[t]&&y(e[t])?e[t]:{},e[t]=extend(u,o,r[t])):void 0!==r[t]&&(e[t]=r[t])); return e} |
And here an example:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | var object_a = { value_1: 'a' , value_2: true , value_3: 354, value_4: [ 'x' , 'y' , 'z' ], value_5: { I: 'I' , II: 'II' , III: 'III' , IV: { a: 'A' , b: 'B' }, V: [ 'elm' , { 5: 'five' }, [ 'my_array' ] ] }, value_6: function () { return "pouet" }, value_7: new Date(2017, 0, 1) }; var object_b = {}; // clone object_a into object_b extend( true , object_b, object_a); object_a.value_2 = false ; object_a.value_1 = "b" ; console.log( "A => " , object_a); console.log( "B => " , object_b); |