Skip to content

Instantly share code, notes, and snippets.

@bravelincy
Created May 8, 2017 04:17
Show Gist options
  • Save bravelincy/d43297da21bb6a83d050c531030d3d76 to your computer and use it in GitHub Desktop.
Save bravelincy/d43297da21bb6a83d050c531030d3d76 to your computer and use it in GitHub Desktop.
const slice = Array.prototype.slice;
const toString = Object.prototype.toString;
function isObject(value) {
return value !== null && typeof value === 'object';
}
function clone(value, deep) {
if (isObject(value)) {
let copy;
switch (toString.call(value)) {
case '[object Array]':
copy = value.slice();
break;
case '[object RegExp]':
copy = new RegExp(value);
break;
case '[object Date]':
copy = new Date(+value);
break;
default:
copy = {};
}
for (let k in value) {
let v = value[k];
copy[k] = deep ? clone(v, true) : v;
}
return copy;
}
return value;
}
function extend(deep, dst, src) {
if (typeof deep !== 'boolean') {
src = slice.call(arguments, 1);
dst = deep;
deep = false;
} else {
src = slice.call(arguments, 2);
}
src.forEach(srcObj => {
for (let k in srcObj) {
let v = srcObj[k];
dst[k] = deep ? clone(v, true) : v;
}
});
return dst;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment