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