|  | var SetCache = require('./_SetCache'), | 
|  | arrayIncludes = require('./_arrayIncludes'), | 
|  | arrayIncludesWith = require('./_arrayIncludesWith'), | 
|  | arrayMap = require('./_arrayMap'), | 
|  | baseUnary = require('./_baseUnary'), | 
|  | cacheHas = require('./_cacheHas'); | 
|  |  | 
|  | /* Built-in method references for those with the same name as other `lodash` methods. */ | 
|  | var nativeMin = Math.min; | 
|  |  | 
|  | /** | 
|  | * The base implementation of methods like `_.intersection`, without support | 
|  | * for iteratee shorthands, that accepts an array of arrays to inspect. | 
|  | * | 
|  | * @private | 
|  | * @param {Array} arrays The arrays to inspect. | 
|  | * @param {Function} [iteratee] The iteratee invoked per element. | 
|  | * @param {Function} [comparator] The comparator invoked per element. | 
|  | * @returns {Array} Returns the new array of shared values. | 
|  | */ | 
|  | function baseIntersection(arrays, iteratee, comparator) { | 
|  | var includes = comparator ? arrayIncludesWith : arrayIncludes, | 
|  | length = arrays[0].length, | 
|  | othLength = arrays.length, | 
|  | othIndex = othLength, | 
|  | caches = Array(othLength), | 
|  | maxLength = Infinity, | 
|  | result = []; | 
|  |  | 
|  | while (othIndex--) { | 
|  | var array = arrays[othIndex]; | 
|  | if (othIndex && iteratee) { | 
|  | array = arrayMap(array, baseUnary(iteratee)); | 
|  | } | 
|  | maxLength = nativeMin(array.length, maxLength); | 
|  | caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) | 
|  | ? new SetCache(othIndex && array) | 
|  | : undefined; | 
|  | } | 
|  | array = arrays[0]; | 
|  |  | 
|  | var index = -1, | 
|  | seen = caches[0]; | 
|  |  | 
|  | outer: | 
|  | while (++index < length && result.length < maxLength) { | 
|  | var value = array[index], | 
|  | computed = iteratee ? iteratee(value) : value; | 
|  |  | 
|  | value = (comparator || value !== 0) ? value : 0; | 
|  | if (!(seen | 
|  | ? cacheHas(seen, computed) | 
|  | : includes(result, computed, comparator) | 
|  | )) { | 
|  | othIndex = othLength; | 
|  | while (--othIndex) { | 
|  | var cache = caches[othIndex]; | 
|  | if (!(cache | 
|  | ? cacheHas(cache, computed) | 
|  | : includes(arrays[othIndex], computed, comparator)) | 
|  | ) { | 
|  | continue outer; | 
|  | } | 
|  | } | 
|  | if (seen) { | 
|  | seen.push(computed); | 
|  | } | 
|  | result.push(value); | 
|  | } | 
|  | } | 
|  | return result; | 
|  | } | 
|  |  | 
|  | module.exports = baseIntersection; |