_createOver.js 1023 B

1234567891011121314151617181920212223242526272829303132
  1. var apply = require('./_apply'),
  2. arrayMap = require('./_arrayMap'),
  3. baseFlatten = require('./_baseFlatten'),
  4. baseIteratee = require('./_baseIteratee'),
  5. baseUnary = require('./_baseUnary'),
  6. isArray = require('./isArray'),
  7. isFlattenableIteratee = require('./_isFlattenableIteratee'),
  8. rest = require('./rest');
  9. /**
  10. * Creates a function like `_.over`.
  11. *
  12. * @private
  13. * @param {Function} arrayFunc The function to iterate over iteratees.
  14. * @returns {Function} Returns the new over function.
  15. */
  16. function createOver(arrayFunc) {
  17. return rest(function(iteratees) {
  18. iteratees = (iteratees.length == 1 && isArray(iteratees[0]))
  19. ? arrayMap(iteratees[0], baseUnary(baseIteratee))
  20. : arrayMap(baseFlatten(iteratees, 1, isFlattenableIteratee), baseUnary(baseIteratee));
  21. return rest(function(args) {
  22. var thisArg = this;
  23. return arrayFunc(iteratees, function(iteratee) {
  24. return apply(iteratee, thisArg, args);
  25. });
  26. });
  27. });
  28. }
  29. module.exports = createOver;