Hay dos formas en las que puede recorrer más de una matriz: un bucle numérica sobre los elementos indexados de una matriz o una for in
iteración sobre las propiedades de objeto de una matriz.
var a = ['a','b'];
a[3] = 'e';
a[2] = 'd';
a.foo = function() { };
for(key in a)
console.log(key);
Esto devuelve 0 1 3 2 foo
, ya que ese es el orden de las propiedades fueron definidos (pero no hay promesa de que su navegador siquiera necesita exhibir un comportamiento que, tampoco).
Hasta el momento, los bucles numéricos se ven superiores, pero no pueden manejar matrices de repuesto, es decir, matrices con espacios. El ES5 Array.forEach
omite valores no especificados, mientras que jQuery's $.each
utiliza un bucle numérico basado en la propiedad length
.
var a = [1,2];
a[1000000] = 4;
a[9000] = 3;
a.foo = function() {};
// outputs 0, 1, 9000, 1000000 -- note they are in order
a.forEach(function(elem, index){ console.log(index); })
// outputs 0, 1, 9000, 1000000 -- same as above
_.each(a, function(elem, index){ console.log(index); })
// outputs a million values and locks up your browser for a while
$.each(a, function(index){ console.log(index); })
Así, tanto forEach
y $.each
volver a sus valores con el fin índice, pero forEach
y subrayado parece superior para matrices dispersas, ya que ignoran los índices que no han tenido un valor asignado a ellos.
Asegúrate de tener claro qué es una matriz y qué objeto hay en JavaScript ... – Pointy