JSFiddle - React, Tailwind, and code Playground

HTML

<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<div class="results"></div>

JavaScript

var addedList = [],
    removedList = [],
    changedList = [],
    changeLog = [],
    path = "";

var vt1, vt2;

function logVt( options ) {
    
    var a = options.before,
        b = options.after,
        name = options.name || "";

    if( options.name === "" ){
        vt1 = options.before;
        vt2 = options.after;
    }

    var typeA = typeofReal(a),
        typeB = typeofReal(b),
        type;

    var aString = (typeA === "object" || typeA === "array") ? "" : String(a) + " ";
    var bString = (typeB === "object" || typeB === "array") ? "" : String(b) + " ";


    if (a === undefined) {
        var path = getPath(b, name, bString);
        type = "added";
        addedList.push({
            type: type,
            field: name,
            path: path,

            after: bString
        });
    }
    else if (b === undefined) {
        var path = getPath(a, name, aString);
        console.log(path);
        type = "removed";
        removedList.push({
            type: type,
            field: name,
            path: path,

            before: aString
        });
    }
    else if (typeA !== typeB || (typeA !== "object" && typeA !== "array" && a !== b)) {
        var path = getPath(b, name, bString);
        type = "changed";
        changedList.push({
            type: type,
            field: name,
            path: path,

            before: aString,
            after: bString
        });
    }
    else {
        type = "exist";
    }

    if (typeA === "object" || typeA === "array" || typeB === "object" || typeB === "array") {
        var keys = [];
        for (var i in a) {
            if (a.hasOwnProperty(i)) {
                keys.push(i);
            }
        }
        for (var i in b) {
            if (b.hasOwnProperty(i)) {
                keys.push(i);
            }
        }
        keys.sort();

        for (var i = 0; i < keys.length; i++) {
            if (keys[i] === keys[i-1]) {
                continue;
            }
          ...