Intersection of objects using underscore

by Luis Perez

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

JavaScript

function intersectionObjects2(a, b, areEqualFunction) {
        var results = [];
        
        for(var i = 0; i < a.length; i++) {
            var aElement = a[i];
            var existsInB = _.any(b, function(bElement) { return areEqualFunction(bElement, aElement); });

            if(existsInB) {
                results.push(aElement);
            }
        }
        
        return results;
    }
    
    function intersectionObjects() {
        var results = arguments[0];
        var lastArgument = arguments[arguments.length - 1];
        var arrayCount = arguments.length;
        var areEqualFunction = _.isEqual;
        
        if(typeof lastArgument === "function") {
            areEqualFunction = lastArgument;
            arrayCount--;
        }
        
        for(var i = 1; i < arrayCount ; i++) {
            var array = arguments[i];
            results = intersectionObjects2(results, array, areEqualFunction);
            if(results.length === 0) break;
        }

        return results;
    }

    var a = [ { id: 1, name: 'jake' } ];
    var b = [ { id: 1, name: 'jake' }, { id:4, name: 'jenny'} ];
    var c = [ { id: 1, name: 'jake' }, { id:4, name: 'jenny'}, { id: 9, name: 'nick'} ];
    
    var result = intersectionObjects(a, b, c, function(item1, item2) {
        return item1.id === item2.id;
    });

console.dir(result);