vendor/optional/lodash-0.3.2.js
function intersection(array) {
    var result = [];
    if (!array) {
      return result;
    }
    var value,
        index = -1,
        length = array.length,
        others = slice.call(arguments, 1);

    while (++index < length) {
      value = array[index];
      if (indexOf(result, value) < 0 &&
          every(others, function(other) { return indexOf(other, value) > -1; })) {
        result.push(value);
      }
    }
    return result;
  }
function intersection(array) {
    var result = [];
    if (!array) {
      return result;
    }
    var value,
        index = -1,
        length = array.length,
        others = slice.call(arguments, 1);

    while (++index < length) {
      value = array[index];
      if (indexOf(result, value) < 0 &&
          every(others, function(other) { return indexOf(other, value) > -1; })) {
        result.push(value);
      }
    }
    return result;
  }
function intersection ( array ) { var result = [ ] ; if ( ! array ) { return result ; } var value , index = - 1 , length = array . length , others = slice . call ( arguments , 1 ) ; while ( ++ index < length ) { value = array [ index ] ; if ( indexOf ( result , value ) < 0 && every ( others , function ( other ) { return indexOf ( other , value ) > - 1 ; } ) ) { result . push ( value ) ; } } return result ; }
Computes the intersection of all the passed-in arrays.

@static
@memberOf _
@category Arrays
@param {Array} [array1, array2, ...] Arrays to process.
@returns {Array} Returns a new array of unique values, in order, that are
present in **all** of the arrays.
@example

_.intersection([1, 2, 3], [101, 2, 1, 10], [2, 1]);
// => [1, 2]
Computes the intersection of all the passed - in arrays .