mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-02 16:17:50 +00:00
37 lines
1.0 KiB
JavaScript
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
|