Recorrer un array
La forma más simple de recorrer un array es usar un bucle for e ir leyendo cada elemento mediante su índice. Es la más simple pero eso implica escribir más código.
Hay otras opciones
- el método forEach() es un bucle con función de llamada
- el iterador keys() crea un iterador para un bucle
El método array.forEach( fn ) permite recorrer el array y procesar cada elemento sin necesidad de utilizar el índice para leerlos.
El método usa una función que es llamada para cada item del array (función callback). La función recibe hasta tres argumentos: el valor del elemento, su índice y el array completo. Esta función hace el papel del cuerpo del bucle
No solo ahorra código sino que facilita la comprensión y seguimiento del script. Como en este caso, vamos a poner en plural cada fruta.
var frutas = Array.of('pera', 'manzana', 'uva');
frutas.forEach(function(v,i,a){a[i] = v+"s"})
En este ejemplo se ha usado una función anónima y se ha usado el array, el ínidice y el valor. Esto es prácticamnte igual que con un bucle for, while o do. Veamos este otro.
var frutas = Array.of('pera', 'manzana', 'uva');
var precios = {pera:10, manzana:20, uva:15};
frutas.forEach(function(v){
console.log(v+": "+precios[v])
})
En este ejemplo la función solo requiere un parámetro, valor, con el cual leemos el objeto precios. Como ves no se necesita el índice.
Podemos usar una función por su nombre en lugar de una función anónima, lo que te permite utilizar una misma función pra varios arrays
var numeros = Array.of(1,2,3,4,5);
var cuadrados = function(v, i, a){
a[i] = v*v;
};
numeros.forEach(cuadrados))
console.log(numeros); //2,4,9,16,25
Vamos a usar este métodos para comparar copiar un array en otro, este otro se crea con la misma longitud que el array origen, por simplificar el ejemplo
var numeros = Array.of(1,2,3,4,5);
var valores = new Array(numeros.length)
var copiar = function(v,i){this[i] = v};
numeros.forEach( copiar, valores)
console.log(valores);
Se ha usado un argumento opcional de forEach: el argumento valores, este argumento es el que la funcion callback toma como valor de this. En el ejemplo dentro de la función copiar la referencia this equivale a valores. Es una manera de pasar un argumento extra a la función de llamada, además del valor, indice y el propio array.
Por su parte el método keys() devuelve un iterador que puede usarse para recorrer la matriz mediante un bucle for..of
var numeros = Array.of(1,2,3,4,5);
var iter = numeros.keys();
for (let indice of iter){
console.log(numeros[indice])
};