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, IFdichiarazioni, FORloop e WHILEloop.
Un forcerchio tradizionale
Un forloop 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 forloop 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 forloop 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 whileciclo
Un'alternativa a un forloop è un whileloop. Per eseguire il loop in un array, è possibile effettuare ciò:
var key = 0;
while(value = myArray[key++]){
console.log(value);
}
Come i forloop tradizionali , i whileloop sono supportati anche dal più vecchio dei browser.
Inoltre, si noti che ogni ciclo while può essere riscritto come un forciclo. Ad esempio, il whileciclo 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 forciclo 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...ofloop e un for...inloop:
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...inrichiede 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 foreachvariante. 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);
});