Intro
Fin dal mio periodo al college, ho programmato in Java, JavaScript, Pascal, ABAP , PHP, Progress 4GL, C / C ++ e forse alcune altre lingue che non riesco a pensare in questo momento.
Mentre tutti hanno le loro idiosincrasie linguistiche, ognuna di queste lingue condivide molti degli stessi concetti di base. Tali concetti includono procedure / funzioni, IF
dichiarazioni, FOR
loop e WHILE
loop.
Un for
cerchio tradizionale
Un for
loop tradizionale ha tre componenti:
- L'inizializzazione: eseguita prima che il blocco visivo venga eseguito per la prima volta
- La condizione: controlla una condizione ogni volta prima che venga eseguito il blocco di loop e chiude il loop se falso
- Il ripensamento: eseguito ogni volta che viene eseguito il loop loop
Questi tre componenti sono separati l'uno dall'altro da un ;
simbolo. Il contenuto di ciascuno di questi tre componenti è facoltativo, il che significa che il seguente è il for
loop più minimo possibile:
for (;;) {
// Do stuff
}
Ovviamente, dovrai includere un if(condition === true) { break; }
o un punto if(condition === true) { return; }
all'interno di quel for
-loop per farlo smettere di funzionare.
Di solito, tuttavia, l'inizializzazione viene utilizzata per dichiarare un indice, la condizione viene utilizzata per confrontare quell'indice con un valore minimo o massimo e il ripensamento viene utilizzato per incrementare l'indice:
for (var i = 0, length = 10; i < length; i++) {
console.log(i);
}
Utilizzo di un for
loop tradizionale per eseguire il loop in un array
Il modo tradizionale per eseguire il loop in un array è questo:
for (var i = 0, length = myArray.length; i < length; i++) {
console.log(myArray[i]);
}
Oppure, se si preferisce eseguire il looping all'indietro, procedere come segue:
for (var i = myArray.length - 1; i > -1; i--) {
console.log(myArray[i]);
}
Vi sono, tuttavia, molte varianti possibili, come ad esempio questa:
for (var key = 0, value = myArray[key], length = myArray.length; key < length; value = myArray[++key]) {
console.log(value);
}
... o questo ...
var i = 0, length = myArray.length;
for (; i < length;) {
console.log(myArray[i]);
i++;
}
... o questo:
var key = 0, value;
for (; value = myArray[key++];){
console.log(value);
}
Qualunque cosa funzioni meglio è in gran parte una questione di gusti personali e del caso d'uso specifico che stai implementando.
Nota che ognuna di queste varianti è supportata da tutti i browser, inclusi quelli molto vecchi!
Un while
ciclo
Un'alternativa a un for
loop è un while
loop. Per eseguire il loop in un array, è possibile effettuare ciò:
var key = 0;
while(value = myArray[key++]){
console.log(value);
}
Come i for
loop tradizionali , i while
loop sono supportati anche dal più vecchio dei browser.
Inoltre, si noti che ogni ciclo while può essere riscritto come un for
ciclo. Ad esempio, il while
ciclo qui sopra si comporta esattamente allo stesso modo di questo for
-loop:
for(var key = 0; value = myArray[key++];){
console.log(value);
}
For...in
e for...of
In JavaScript, puoi anche fare questo:
for (i in myArray) {
console.log(myArray[i]);
}
Questo dovrebbe essere usato con cura, tuttavia, poiché non si comporta come un for
ciclo tradizionale in tutti i casi e ci sono potenziali effetti collaterali che devono essere considerati. Vedi Perché usare "for ... in" con l'iterazione dell'array è una cattiva idea? per ulteriori dettagli.
In alternativa a for...in
, ora c'è anche per for...of
. L'esempio seguente mostra la differenza tra un for...of
loop e un for...in
loop:
var myArray = [3, 5, 7];
myArray.foo = "hello";
for (var i in myArray) {
console.log(i); // logs 0, 1, 2, "foo"
}
for (var i of myArray) {
console.log(i); // logs 3, 5, 7
}
Inoltre, è necessario considerare che nessuna versione di Internet Explorer supporta for...of
( Edge 12+ supporta ) e che for...in
richiede almeno Internet Explorer 10.
Array.prototype.forEach()
Un'alternativa a for
-loops è Array.prototype.forEach()
, che utilizza la sintassi seguente:
myArray.forEach(function(value, key, myArray) {
console.log(value);
});
Array.prototype.forEach()
è supportato da tutti i browser moderni, nonché da Internet Explorer 9 e versioni successive.
biblioteche
Infine, anche molte librerie di utilità hanno una propria foreach
variante. AFAIK, i tre più popolari sono questi:
jQuery.each()
, in jQuery :
$.each(myArray, function(key, value) {
console.log(value);
});
_.each()
, in Underscore.js :
_.each(myArray, function(value, key, myArray) {
console.log(value);
});
_.forEach()
, in Lodash.js :
_.forEach(myArray, function(value, key) {
console.log(value);
});