Usar _.each limpa seus loops de javascript

Nativo para :

for (var i = 0; i < posts.length; i++) {
var post = posts[i];
for (var j = 0; j < post.comments.length; j++) {
var comment = comments[j];
console
.log(comment.body);
}
};

Native forEach (navegadores modernos)

posts.forEach(function(post) {
post
.comments.forEach(function(comment) {
console
.log(comment.body);
});
});

http://underscorejs.org/#each

Sublinha cada um (Cross-Browser) :

_.each(posts, function(post) {
_
.each(post.comments, function(comment){
console
.log(comment.body);
});
});

** Suger each (Cross-Browser) **

http://sugarjs.com/api/Array/each

posts.each(function(post) {
post
.comments.each(function(comment){
console
.log(comment.body);
});
});

Eu sei que os loops for nativos são mais eficientes, mas para mim um código legível limpo tem precedência.

[Editar] Além disso, há o método forEach nativo do ECMAScript 5 para o qual _.each delega, mas não é compatível com o IE8. Sou um grande fã da biblioteca underscore.js, então ainda prefiro usar o método cross-browser _.each.

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/forEach

Se quiser evitar o uso de underscore.js, você pode corrigir condicionalmente os navegadores mais antigos para dar suporte ao forEach com o seguinte (retirado do link acima):

if ( !Array.prototype.forEach ) {
Array.prototype.forEach = function(fn, scope) {
for(var i = 0, len = this.length; i < len; ++i) {
fn
.call(scope || this, this[i], i, this);
}
}
}