Initial commit
[yaffs-website] / node_modules / grunt-contrib-watch / node_modules / globule / node_modules / lodash / _baseIntersection.js
1 var SetCache = require('./_SetCache'),
2     arrayIncludes = require('./_arrayIncludes'),
3     arrayIncludesWith = require('./_arrayIncludesWith'),
4     arrayMap = require('./_arrayMap'),
5     baseUnary = require('./_baseUnary'),
6     cacheHas = require('./_cacheHas');
7
8 /* Built-in method references for those with the same name as other `lodash` methods. */
9 var nativeMin = Math.min;
10
11 /**
12  * The base implementation of methods like `_.intersection`, without support
13  * for iteratee shorthands, that accepts an array of arrays to inspect.
14  *
15  * @private
16  * @param {Array} arrays The arrays to inspect.
17  * @param {Function} [iteratee] The iteratee invoked per element.
18  * @param {Function} [comparator] The comparator invoked per element.
19  * @returns {Array} Returns the new array of shared values.
20  */
21 function baseIntersection(arrays, iteratee, comparator) {
22   var includes = comparator ? arrayIncludesWith : arrayIncludes,
23       length = arrays[0].length,
24       othLength = arrays.length,
25       othIndex = othLength,
26       caches = Array(othLength),
27       maxLength = Infinity,
28       result = [];
29
30   while (othIndex--) {
31     var array = arrays[othIndex];
32     if (othIndex && iteratee) {
33       array = arrayMap(array, baseUnary(iteratee));
34     }
35     maxLength = nativeMin(array.length, maxLength);
36     caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))
37       ? new SetCache(othIndex && array)
38       : undefined;
39   }
40   array = arrays[0];
41
42   var index = -1,
43       seen = caches[0];
44
45   outer:
46   while (++index < length && result.length < maxLength) {
47     var value = array[index],
48         computed = iteratee ? iteratee(value) : value;
49
50     value = (comparator || value !== 0) ? value : 0;
51     if (!(seen
52           ? cacheHas(seen, computed)
53           : includes(result, computed, comparator)
54         )) {
55       othIndex = othLength;
56       while (--othIndex) {
57         var cache = caches[othIndex];
58         if (!(cache
59               ? cacheHas(cache, computed)
60               : includes(arrays[othIndex], computed, comparator))
61             ) {
62           continue outer;
63         }
64       }
65       if (seen) {
66         seen.push(computed);
67       }
68       result.push(value);
69     }
70   }
71   return result;
72 }
73
74 module.exports = baseIntersection;