| 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; |