JSFiddle - React, Tailwind, and code Playground
by xavierm02
JavaScript
( function ( ) {
var hasOwnProperty = { }.hasOwnProperty;
Object.deepDataClone = function ( object, number ) {
var maps = [ ];
while ( number --> 0 ) {
maps.push( new WeakMap( ) );
}
if ( Object( object ) !== object ) {
return maps.map( function ( ) {
return object;
} );
}
return deepDataClone( object, maps );
};
var deepDataClone = function ( object, maps ) {
var clone;
var clones;
var key;
var value;
if ( maps[ 0 ].has( object ) ) {
return maps.map( function ( map ) {
return map.get( object );
} );
}
if ( Array.isArray( object ) ) {
return maps.map( function ( map ) {
clone = object.slice( );
map.set( object, clone );
return clone;
} );
}
clones = maps.map( function ( map ) {
clone = Object.create( object );
map.set( object, clone );
return clone;
} );
for ( key in object ) {
if ( hasOwnProperty.call( object, key ) ) {
value = object[ key ];
if ( Object( value ) === value ) {
deepDataClone( value, maps ).forEach( function ( value, index ) {
clones[ index ][ key ] = value;
} );
}
}
}
return clones;
};
}( ) );
var data = data1 = {
number: 1,
array: [ 0, 1 ],
object: {
p: 'v'
},
null: null
};
var dataCopy = Object.deepDataClone( data, 2 );
var data2 = dataCopy[ 0 ];
var data3 = dataCopy[ 1 ];
console.log( data1, data2, data3 );