Files
lodash/.internal/baseXor.js
2017-03-07 22:07:04 -08:00

37 lines
1.0 KiB
JavaScript

import baseDifference from './baseDifference.js'
import baseFlatten from './baseFlatten.js'
import baseUniq from './baseUniq.js'
/**
* The base implementation of methods like `xor` which 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) {
const length = arrays.length
if (length < 2) {
return length ? baseUniq(arrays[0]) : []
}
let index = -1
const result = new Array(length)
while (++index < length) {
const array = arrays[index]
let 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)
}
export default baseXor