Buscar..


Sintaxis

  • para ( inicialización ; condición ; expresión_final ) {}
  • para ( clave en objeto ) {}
  • para ( variable de iterable ) {}
  • while ( condición ) {}
  • do {} while ( condicion )
  • para cada ( variable en objeto ) {} // ECMAScript para XML

Observaciones

Los bucles en JavaScript generalmente ayudan a resolver problemas que involucran la repetición de un código específico x cantidad de veces. Digamos que necesitas registrar un mensaje 5 veces. Podrías hacer esto:

console.log("a message");
console.log("a message");
console.log("a message");
console.log("a message");
console.log("a message");

Pero eso solo consume mucho tiempo y es algo ridículo. Además, ¿qué sucede si necesita registrar más de 300 mensajes? Debe reemplazar el código con un bucle tradicional "for":

for(var i = 0; i < 5; i++){
    console.log("a message");
}

Bucles estándar "para"

Uso estándar

for (var i = 0; i < 100; i++) {
    console.log(i);
}

Rendimiento esperado:

0
1
...
99

Declaraciones multiples

Normalmente se utiliza para almacenar en caché la longitud de una matriz.

var array = ['a', 'b', 'c'];
for (var i = 0; i < array.length; i++) {
    console.log(array[i]);
}

Rendimiento esperado:

'una'
'segundo'
'do'

Cambiando el incremento

for (var i = 0; i < 100; i += 2 /* Can also be: i = i + 2 */) {
    console.log(i);
}

Rendimiento esperado:

0
2
4
...
98

Bucle decrementado

for (var i = 100; i >=0; i--) {
    console.log(i);
}

Rendimiento esperado:

100
99
98
...
0

"while" bucles

Standard While Loop

Un bucle while estándar se ejecutará hasta que la condición dada sea falsa:

var i = 0;
while (i < 100) {
    console.log(i);
    i++;
}

Rendimiento esperado:

0
1
...
99

Bucle decrementado

var i = 100;
while (i > 0) {
    console.log(i);
    i--; /* equivalent to i=i-1 */
}

Rendimiento esperado:

100
99
98
...
1

Hacer ... mientras bucle

Un bucle do ... while siempre se ejecutará al menos una vez, independientemente de si la condición es verdadera o falsa:

var i = 101;
do {
    console.log(i);
} while (i < 100);

Rendimiento esperado:

101

"Romper" fuera de un bucle

Saliendo de un bucle mientras

var i = 0;
while(true) {
    i++;
    if(i === 42) {
        break;
    }
}
console.log(i);

Rendimiento esperado:

42

Salir de un bucle for

var i;
for(i = 0; i < 100; i++) {
    if(i === 42) {
        break;
    }
}
console.log(i);

Rendimiento esperado:

42

"continuar" un bucle

Continuando con un bucle "for"

Cuando coloca la palabra clave continue en un bucle for, la ejecución salta a la expresión de actualización ( i++ en el ejemplo):

for (var i = 0; i < 3; i++) {
    if (i === 1) {
        continue;
    }
    console.log(i);
}

Rendimiento esperado:

0
2

Continuando un bucle While

Cuando continue en un bucle while, la ejecución salta a la condición ( i < 3 en el ejemplo):

var i = 0;
while (i < 3) {
    if (i === 1) {
        i = 2;
        continue;
    }
    console.log(i);
    i++;
}

Rendimiento esperado:

0
2

"do ... while" loop

var availableName;
do {
    availableName = getRandomName();
} while (isNameUsed(name));

Se garantiza do while bucle do while while se ejecute al menos una vez, ya que su condición solo se verifica al final de una iteración. Un bucle while tradicional puede ejecutarse cero o más veces, ya que su condición se verifica al comienzo de una iteración.

Romper bucles anidados específicos

Podemos nombrar nuestros bucles y romper el específico cuando sea necesario.

outerloop:
for (var i = 0;i<3;i++){
    innerloup:
    for (var j = 0;j <3; j++){
        console.log(i);
        console.log(j);
        if (j == 1){
            break outerloop;    
        }
    }
}

Salida:

0
0
0
1

Romper y continuar etiquetas

Las declaraciones de ruptura y continuación pueden ir seguidas de una etiqueta opcional que funciona como una especie de instrucción goto, que reanuda la ejecución desde la posición de la etiqueta referenciada.

for(var i = 0; i < 5; i++){
  nextLoop2Iteration:
  for(var j = 0; j < 5; j++){
    if(i == j) break nextLoop2Iteration;
    console.log(i, j);
  }
}

i = 0 j = 0 salta el resto de los valores de j
1 0
i = 1 j = 1 salta el resto de los valores de j
2 0
2 1 i = 2 j = 2 salta el resto de los valores de j
3 0
3 1
3 2
i = 3 j = 3 salta el resto de los valores de j
4 0
4 1
4 2
4 3
i = 4 j = 4 no registra y se hacen los bucles

bucle "para ... de"

6
const iterable = [0, 1, 2];
for (let i of iterable) {
    console.log(i);
}

Rendimiento esperado:

0
1
2

Las ventajas del for ... of loop son:

  • Esta es la sintaxis directa más concisa para el bucle a través de elementos de matriz
  • Evita todos los escollos de for ... in
  • A diferencia de forEach() , funciona con break, continue y return

Soporte de para ... de en otras colecciones.

Instrumentos de cuerda

for ... of tratará una cadena como una secuencia de caracteres Unicode:

const string = "abc";
for (let chr of string) {
  console.log(chr);
}

Rendimiento esperado:

a B C

Conjuntos

para ... de obras sobre objetos establecidos .

Nota :

const names = ['bob', 'alejandro', 'zandra', 'anna', 'bob'];

const uniqueNames = new Set(names);

for (let name of uniqueNames) {
  console.log(name);
}

Rendimiento esperado:

mover
alejandro
zandra
anna

Mapas

También puede utilizar para ... de bucles para iterar sobre los mapas . Esto funciona de manera similar a matrices y conjuntos, excepto que la variable de iteración almacena tanto una clave como un valor.

const map = new Map()
  .set('abc', 1)
  .set('def', 2)

for (const iteration of map) {
  console.log(iteration) //will log ['abc', 1] and then ['def', 2]
}

Puede usar la asignación de desestructuración para capturar la clave y el valor por separado:

const map = new Map()
  .set('abc', 1)
  .set('def', 2)

for (const [key, value] of map) {
  console.log(key + ' is mapped to ' + value)
}
/*Logs:
  abc is mapped to 1
  def is mapped to 2
*/

Objetos

para ... de bucles no funcionan directamente en objetos simples; pero, es posible iterar sobre las propiedades de un objeto cambiando a un bucle for ... in, o usando Object.keys() :

const someObject = { name: 'Mike' };

for (let key of Object.keys(someObject)) {
  console.log(key + ": " + someObject[key]);
}

Rendimiento esperado:

nombre: Mike

bucle "para ... en"

Advertencia
for ... in está pensado para iterar sobre claves de objeto, no índices de matriz. Se desaconseja generalmente usarlo para recorrer una matriz . También incluye propiedades del prototipo, por lo que puede ser necesario verificar si la clave está dentro del objeto usando hasOwnProperty . Si el atributo defineProperty/defineProperties define alguno de los atributos del objeto y establece el parámetro enumerable: false , esos atributos serán inaccesibles.

var object = {"a":"foo", "b":"bar", "c":"baz"};
// `a` is inaccessible
Object.defineProperty(object , 'a', {
        enumerable: false,
});
for (var key in object) {
    if (object.hasOwnProperty(key)) {
      console.log('object.' + key + ', ' + object[key]);
    }
}

Rendimiento esperado:

objeto.b, barra
object.c, baz



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow