const cloneArray = array => array.map(deepClone) const cloneObject = object => Object.keys(object) .reduce((clone, key) => ({ ...clone, [key]: deepClone(object[key])}), {}) export const deepClone = value => Array.isArray(value) ? cloneArray(value) : value !== null && typeof value === 'object' ? cloneObject(value) : value