@squirrel-forge/ui-util
Version:
A collection of utilities, classes, functions and abstracts made for the browser and babel compatible.
32 lines (30 loc) • 931 B
JavaScript
/**
* Requires
*/
import { isPojo } from './isPojo.js';
/**
* Clone object or array
* @param {Object|Array} source - Source to clone
* @param {boolean} recursive - Recursive mode
* @returns {Object|Array} - Cloned object or array
*/
export function cloneObject( source, recursive = false ) {
recursive = !!recursive;
const is_array = source instanceof Array;
const is_plain = isPojo( source );
const cloned = is_array ? [] : {};
let i;
if ( is_array || is_plain ) {
for ( i in source ) {
if ( Object.prototype.hasOwnProperty.call( source, i ) ) {
if ( source[ i ] === null || typeof source[ i ] !== 'object' || !recursive ) {
cloned[ i ] = source[ i ];
} else {
cloned[ i ] = cloneObject( source[ i ], recursive );
}
}
}
return cloned;
}
return source;
}