JSFiddle - React, Tailwind, and code Playground
by Khalil Zhang
JavaScript
function extendDeep(source) {
var result = source,
i, len;
var toStr = Object.prototype.toString;
var astr = "[object Array]";
var ostr = "[object Object]";
if (!source || source instanceof Number || source instanceof String || source instanceof Boolean) {
return result;
} else if (toStr.call(source) === astr) {
result = [];
var resultLen = 0;
for (i = 0, len = source.length; i < len; i++) {
result[resultLen++] = extendDeep(source[i]);
}
} else if (toStr.call(source) === ostr) {
result = {};
for (i in source) {
if (source.hasOwnProperty(i)) {
result[i] = extendDeep(source[i]);
}
}
}
return result;
}
var dad = {
counts: [1, 2, 3],
reads: {
paper: true
}
};
var kid = extendDeep(dad);
kid.counts.push(4);
kid.counts.toString(); // "1,2,3,4"
dad.counts.toString(); // "1,2,3"
dad.reads === kid.reads; // false