Je pense qu'il vaut la peine de mentionner comment le _.each () du Underscore fonctionne en interne. _.Each (list, iteratee) vérifie si la liste passée est un objet tableau ou un objet.
Dans le cas où la liste est un tableau, les arguments iteratee seront un élément de liste et un index comme dans l'exemple suivant:
var a = ['I', 'like', 'pancakes', 'a', 'lot', '.'];
_.each( a, function(v, k) { console.log( k + " " + v); });
0 I
1 like
2 pancakes
3 a
4 lot
5 .
D'un autre côté, si l'argument de la liste est un objet, l'itération prendra un élément de liste et une clé:
var o = {name: 'mike', lastname: 'doe', age: 21};
_.each( o, function(v, k) { console.log( k + " " + v); });
name mike
lastname doe
age 21
Pour référence, c'est le code _.each () de Underscore.js 1.8.3
_.each = _.forEach = function(obj, iteratee, context) {
iteratee = optimizeCb(iteratee, context);
var i, length;
if (isArrayLike(obj)) {
for (i = 0, length = obj.length; i < length; i++) {
iteratee(obj[i], i, obj);
}
} else {
var keys = _.keys(obj);
for (i = 0, length = keys.length; i < length; i++) {
iteratee(obj[keys[i]], keys[i], obj);
}
}
return obj;
};