_baseXor.js (1099B)
1 var baseDifference = require('./_baseDifference'), 2 baseFlatten = require('./_baseFlatten'), 3 baseUniq = require('./_baseUniq'); 4 5 /** 6 * The base implementation of methods like `_.xor`, without support for 7 * iteratee shorthands, that accepts an array of arrays to inspect. 8 * 9 * @private 10 * @param {Array} arrays The arrays to inspect. 11 * @param {Function} [iteratee] The iteratee invoked per element. 12 * @param {Function} [comparator] The comparator invoked per element. 13 * @returns {Array} Returns the new array of values. 14 */ 15 function baseXor(arrays, iteratee, comparator) { 16 var length = arrays.length; 17 if (length < 2) { 18 return length ? baseUniq(arrays[0]) : []; 19 } 20 var index = -1, 21 result = Array(length); 22 23 while (++index < length) { 24 var array = arrays[index], 25 othIndex = -1; 26 27 while (++othIndex < length) { 28 if (othIndex != index) { 29 result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator); 30 } 31 } 32 } 33 return baseUniq(baseFlatten(result, 1), iteratee, comparator); 34 } 35 36 module.exports = baseXor;