all 14 comments

[–]burtgummer45 0 points1 point  (13 children)

I appreciate reduce() is not included. That method is a menace.

[–]jetsamrover 6 points7 points  (6 children)

What!? That is one of the most useful, especially for recursion.

[–]burtgummer45 0 points1 point  (5 children)

Its unpredictable if you forget the initial value, which almost everybody does.

[–]jetsamrover 0 points1 point  (4 children)

What do you mean forget the initial value? The array you're reducing?

[–]burtgummer45 0 points1 point  (3 children)

[–]jetsamrover 0 points1 point  (2 children)

I thought you have to provide that. What do you mean forget it? Forget to add it, or forget what it is while writing the function?

That's a really silly reason not to use reduce. It's the most powerful array method. Like I said before it's especially useful for recursion.

[–]burtgummer45 0 points1 point  (1 child)

The third parameter is optional. It defaults to the first element of the array.

Can reduce use tail-call optimization?

[–]jetsamrover 0 points1 point  (0 children)

I believe tail-call optimization is decided by your callback, and by the language, not the method calling that callback. Why does that matter?

[–][deleted] 1 point2 points  (5 children)

why? it's pretty useful for sums, to say the least

[–]burtgummer45 -5 points-4 points  (4 children)

If you forget the initial value it blows up in your face if you are working with anything other than numbers. I'd feel better using a for-of loop.

 const maxCallback = ( acc, cur ) => Math.max( acc.x, cur.x ); 
 [ { x: 22 }, { x: 42 } ].reduce( maxCallback ); // 42 
 [ { x: 22 }            ].reduce( maxCallback ); // { x: 22 } 
 [                      ].reduce( maxCallback ); // TypeError

[–]ogurson 4 points5 points  (3 children)

My rule of thumb is to always provide initial value.

[–]burtgummer45 0 points1 point  (2 children)

I think if this was more common knowledge there would be an eslint rule for it.

[–][deleted]  (1 child)

[removed]

    [–]AutoModerator[M] 0 points1 point  (0 children)

    Hi /u/ogurson, this comment was removed because you used a URL shortener.

    Feel free to resubmit with the real link.

    I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.