38.3 foreach
Spighiamo il foreach con un esempio pratico, dato il seguente file HTML
<!DOCTYPE html> <html lang="it"> <head> <meta charset="UTF-8"> <title>foreach</title> <script src="foreach.js"></script> </head> <body> <h1>foreach Cities</h1> <div id="city"></div> <script src="foreach.js"></script> </body> </html>
abbiamo inserito un <div> con id city inseriamo nel file foreach.js un array cities contenente oggetti con città e regioni
let cities = [ { name: 'TORINO' , reg: 'PIE' } , { name: 'ASTI' , reg: 'PIE' } , { name: 'MILANO' , reg: 'LOM' } , { name: 'COMO' , reg: 'LOM' } ];
l’obbiettivo è quello di ciclare l’array city e inserire i dati nel <div> id=city, quindi memorizziamo il riferimento ad esso con getElementById
let city = document.getElementById('city');
inoltre creo un elemento <ul> con createElement
let ul = document.createElement('ul');
ora utilizzo il forEach sull’array cities che riceve gli stessi parametri della funzione filter, anche in questo ci interessa solo il primo parametro ele, per inserire le città dentro a degli <li>
cities.forEach( function (ele) { let li = document.createElement('li'); });
La funzione forEach esegue la funzione che passiamo come parametro per tutti gli elementi dell’array che siano dettati, cioè diversi da UNDEFINED oppure oggetti con chiavi eliminate.
Adesso dentro ogni <li> inserisco il nome delle città che vengono passate dal parametro ele, con innerHTML
li.innerHTML = ele.name;
Infine inserisco (appiccico) ogni <li> creato alla lista <ul> con appendChild
ul.appendChild(li);
Ora che col foreach ho creato tutta la mia lista posso inserirla nel <div> city
city.appendChild(ul);
Ho costruito e inserito nella pagina web la lista delle città recuperate da un array, ecco il codice completo:
let cities = [ { name: 'TORINO' , reg: 'PIE' } , { name: 'ASTI' , reg: 'PIE' } , { name: 'MILANO' , reg: 'LOM' } , { name: 'COMO' , reg: 'LOM' } ]; let city = document.getElementById('city'); let ul = document.createElement('ul'); cities.forEach( function (ele) { let li = document.createElement('li'); li.innerHTML = ele.name; ul.appendChild(li); }); city.appendChild(ul);
Se per esempio volessi ciclare solo le variabili del Piemonte, aggiungo una variabile pieCities che conterrà i dati estratti dall’array con la funzione filter .
let pieCities = cities.filter( v => v.reg == 'PIE');
Si noti l’uso della funzione freccia usata come parametro di filter e l’uso del doppio uguale ( == ).
A questo punto sarà sufficiente ciclare col forEach la variabile pieCities
let ul = document.createElement('ul'); let pieCities = cities.filter( v => v.reg == 'PIE'); pieCities.forEach( function (ele) { let li = document.createElement('li'); li.innerHTML = ele.name; ul.appendChild(li); }); city.appendChild(ul);
allo stesso modo posso fare con le città della Lombardia
let pieCities = cities.filter( v => v.reg == 'LOM');