JSFiddle - React, Tailwind, and code Playground

by 100thGear

JavaScript

var old = [{
    "ticker": "T",
        "positions": ["40", "60", "80"]
}, {
    "ticker": "AAPL",
        "positions": ["10", "20", "60"]
}, {
    "ticker": "IBM",
        "positions": ["90", "10", "25"]
}, {
    "ticker": "MSFT",
        "positions": ["78", "99", "15"]
}];

var newL = [{
    "ticker": "GOOG",
        "positions": ["40", "60", "80"]
}, {
    "ticker": "AAPL",
        "positions": ["10", "20", "60"]
}, {
    "ticker": "IBM",
        "positions": ["90", "16", "25"]
}, {
    "ticker": "MSFT",
        "positions": ["78", "99", "17"]
}];
Object.prototype.equals = function (x) {
    var p;
    for (p in this) {
        if (typeof (x[p]) == 'undefined') {
            return false;
        }
    }

    for (p in this) {
        if (this[p]) {
            switch (typeof (this[p])) {
                case 'object':
                    if (!this[p].equals(x[p])) {
                        return false;
                    }
                    break;
                case 'function':
                    if (typeof (x[p]) == 'undefined' || (p != 'equals' && this[p].toString() != x[p].toString())) return false;
                    break;
                default:
                    if (this[p] != x[p]) {
                        return false;
                    }
            }
        } else {
            if (x[p]) return false;
        }
    }

    for (p in x) {
        if (typeof (this[p]) == 'undefined') {
            return false;
        }
    }

    return true;
};

function contains(a, obj) {
    for (var i = 0; i < a.length; i++) {
        if (a[i].equals(obj)) {
            return true;
        }
    }
    return false;
}

var modified = false;

var deleted = [],
    added = [],
    updated = [];

function comparator(oldList, newList, added, updated, deleted) {
    $.each(old, function (oldIdx, oldVal) {
        if (contains(newL, oldVal)) return true;
        modified = false;
        $.each(newL, function (newIdx, newVal) {
            if...