Quando lavori con gli array, a volte vuoi eseguire del codice per ogni valore dell'array. Questa operazione si chiama iterazione o ciclo sull'array.
Qui vedremo il caso in cui non vuoi modificare l'array durante l'operazione. Per trasformare gli array, vedi invece Concetto trasformazioni di array.
for
Il modo più semplice per iterare su un array è usare un ciclo for: vedi Concetto cicli for.
const numbers = [6.0221515, 10, 23];
for (let i = 0; i < numbers.length; i++) {
console.log(numbers[i]);
}
// => 6.0221515
// => 10
// => 23
for...of
Quando vuoi lavorare direttamente con il valore in ogni iterazione e non ti serve affatto l'indice, puoi usare un ciclo for...of.
for...of funziona come il ciclo for di base mostrato sopra, ma invece di dover gestire l'indice come variabile nel ciclo, ricevi direttamente il valore.
const numbers = [6.0221515, 10, 23];
// Because re-assigning number inside the loop will be very
// confusing, disallowing that via const is preferable.
for (const number of numbers) {
console.log(number);
}
// => 6.0221515
// => 10
// => 23
Proprio come nei normali cicli for, puoi usare continue per interrompere l'iterazione corrente e break per interrompere del tutto l'esecuzione del ciclo.
forEach
Ogni array include un metodo forEach che può essere usato per iterare sugli elementi dell'array.
forEach accetta una callback come parametro.
La funzione di callback viene chiamata una volta per ogni elemento dell'array.
Alla callback vengono passati come argomenti l'elemento corrente, il suo indice e l'array completo.
Spesso vengono usati solo l'elemento corrente o l'indice.
const numbers = [6.0221515, 10, 23];
numbers.forEach((number, index) => console.log(number, index));
// => 6.0221515 0
// => 10 1
// => 23 2
Non c'è modo di interrompere l'iterazione una volta avviato il ciclo forEach.
Le istruzioni break e continue non esistono in questo contesto.
Come maga in erba, Elyse deve analizzare il suo mazzo in tanti modi diversi. Per semplificare, usa solo carte con valori da 1 a 10.
Elyse vuole sapere quante carte di un tipo particolare ha nel suo mazzo.
Scrivi una funzione cardTypeCheck che prende due parametri: un array di carte (il mazzo di Elyse) e il tipo di carta da contare.
La funzione dovrebbe usare forEach e restituire il numero di carte del tipo indicato presenti nel mazzo.
const cardType = 3;
cardTypeCheck([1, 2, 3, 4], cardType);
// => 1
Per un altro trucco, Elyse deve sapere quante carte pari o dispari ci sono nel suo mazzo.
Implementa una funzione determineOddEvenCards che prende due parametri: un array di carte (il mazzo di Elyse) e un booleano (true equivale a «pari» e false equivale a «dispari»).
Questa funzione dovrebbe restituire un unico numero: il numero di carte pari o dispari presenti nel mazzo (a seconda del valore del secondo argomento).
Per fare pratica, stavolta usa un ciclo for...of nell'implementazione della funzione.
determineOddEvenCards([1, 2, 3, 1, 5, 6], true);
// => 2
determineOddEvenCards([1, 2, 3, 1, 5, 6], false);
// => 4
Iscriviti a Exercism per imparare e padroneggiare JavaScript con 37 concetti159 esercizi e il mentoring di persone reali, tutto gratis.