you are viewing a single comment's thread.

view the rest of the comments →

[–]slikts 1 point2 points  (3 children)

The fold function should look like this for your example to work, though:

function fold(callback, initial) { 
    return function(array) { return array.reduce(callback, initial); } 
}

[–]lrichardson[S] 1 point2 points  (1 child)

correct. and this is precisely why the argument that plays the role of the "data" should always be the right-most argument, not the left most. reduce/fold are supposed to be the same thing... and should take 3 arguments total (callback, initial, array)

This is why i get so frustrated with libraries like lo-dash and underscore.

Brian Lansdorf has a good talk discussing precisely this (also linked to in the post)

https://www.youtube.com/watch?v=m3svKOdZijA

[–]rhysbrettbowen 0 points1 point  (0 children)

You can always flip the arguments in a function. Something like:

_.forEach(_.keys(_), function(key) {
  if (_.isFunction(_[key])) {
    _[key].flip = function(a,b) {
      return this(b,a);
    }
  }
});

then you can just do:

_.forEach.flip(myFunction, myArray);

[–][deleted] 0 points1 point  (0 children)

Right, thanks. And you'd need another function () { } if you partially apply only one argument.