xor.js 946 B

1234567891011121314151617181920212223242526272829303132333435
  1. var arrayPush = require('../internal/arrayPush'),
  2. baseDifference = require('../internal/baseDifference'),
  3. baseUniq = require('../internal/baseUniq'),
  4. isArrayLike = require('../internal/isArrayLike');
  5. /**
  6. * Creates an array of unique values that is the [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)
  7. * of the provided arrays.
  8. *
  9. * @static
  10. * @memberOf _
  11. * @category Array
  12. * @param {...Array} [arrays] The arrays to inspect.
  13. * @returns {Array} Returns the new array of values.
  14. * @example
  15. *
  16. * _.xor([1, 2], [4, 2]);
  17. * // => [1, 4]
  18. */
  19. function xor() {
  20. var index = -1,
  21. length = arguments.length;
  22. while (++index < length) {
  23. var array = arguments[index];
  24. if (isArrayLike(array)) {
  25. var result = result
  26. ? arrayPush(baseDifference(result, array), baseDifference(array, result))
  27. : array;
  28. }
  29. }
  30. return result ? baseUniq(result) : [];
  31. }
  32. module.exports = xor;