There is some really good points here. However, i feel a lot of these 'You might not need...' articles are often a straw man response to the idea that developers only use libraries because they are easier to code, not because (some of them) solve cross-browser issues or provide better performance, offer features that there isn't a 1:1 native method for etc.
One of the advantages of underscore (and lodash) is that you can iterate over arrays AND objects indistinctly in most cases. How would you do:<p><pre><code> var a1b2 = _.reduceRight({a:1,b:2},(memo,val,key) => key+val+memo,'');
</code></pre>
or:<p><pre><code> var two = _.find({a:2,b:3,c:4},(val,key) => key !== 'a' && key !== 'c' )
</code></pre>
Until I see _.chain, _.compose, _.partialRight, _.zip or _.throttle (among others) implemented in the standard library lodash is a no-opt.<p>With iterables and the "for of" loop javascript is definitely not going in the direction of functional programming though.
The article doesn't touch at all on the performance of lodash compared to underscore or even native functions. In many cases it is more performant. So while you do have to decide if the extra library load is balance by the better performance in your specific use case, it should be considered.<p>Also, there is the simple fact a lot of people like the abstraction compared to the native solution - it is often simpler to use and remember.
Interesting post with a few neat things I didn't know (spread on an object? Very cool)<p>But then you still have. To deal with awesome functional helpers like denounce, not to mention insanely useful things like cloneDeep and zipObject. Instead I'd note to use the natives tuff wherever possible and use lodash to pull in just the functions you need piecemeal.<p>Oh and you should certainly mention Function.prototype.reduce and Object.assign
Underscore : _.each(array, iteratee)
ES5.1 : array.forEach(iteratee)<p>And all the other elements...<p>Yes, you are right. But... The "array" is not always an Array. document.getElementsByClassName( 'myClass' ) is not an Array but a DOMNodeList. So document.getElementsByClassName( 'myClass' ).forEach(iteratee) will not work. Same for map, reduce...<p>Underscore (or lodash) makes more that just polyfilling es5 methods.
What about _.flatten()? E.g. to flatten an array before find()?<p>Just thought of 1-level flattening [].concat(...array). But it not that explicit. Also, array.find(i => i.foo == 'bar') isn't as readable as _.find(array, { foo: 'bar' }).
true but underscore had the features first... so, i might not need es2015. also i have no idea how to install es2015 or the browser compatibility it brings.<p>thx for the info though. :)