37 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			37 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | var baseDifference = require('./_baseDifference'), | ||
|  |     baseFlatten = require('./_baseFlatten'), | ||
|  |     baseUniq = require('./_baseUniq'); | ||
|  | 
 | ||
|  | /** | ||
|  |  * The base implementation of methods like `_.xor`, 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 values. | ||
|  |  */ | ||
|  | function baseXor(arrays, iteratee, comparator) { | ||
|  |   var length = arrays.length; | ||
|  |   if (length < 2) { | ||
|  |     return length ? baseUniq(arrays[0]) : []; | ||
|  |   } | ||
|  |   var index = -1, | ||
|  |       result = Array(length); | ||
|  | 
 | ||
|  |   while (++index < length) { | ||
|  |     var array = arrays[index], | ||
|  |         othIndex = -1; | ||
|  | 
 | ||
|  |     while (++othIndex < length) { | ||
|  |       if (othIndex != index) { | ||
|  |         result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator); | ||
|  |       } | ||
|  |     } | ||
|  |   } | ||
|  |   return baseUniq(baseFlatten(result, 1), iteratee, comparator); | ||
|  | } | ||
|  | 
 | ||
|  | module.exports = baseXor; |