function.js 599 B

1234567891011121314151617181920212223242526
  1. 'use strict';
  2. const toArray = require('./array').toArray;
  3. const argsToArray = fn => () => fn(toArray(arguments));
  4. const curry = fn => {
  5. return function curried () {
  6. const that = this,
  7. args = Array.prototype.slice.call(arguments);
  8. if (args.length < fn.length) {
  9. return curried.bind.apply(curried, [that].concat(args));
  10. } else {
  11. return fn.apply(that, args);
  12. }
  13. };
  14. };
  15. const combine = argsToArray(fns => fns.reverse().reduce((fnc, fn) => val => fnc(fn(val))));
  16. module.exports = {
  17. argsToArray,
  18. combine,
  19. curry
  20. };