2

Yo tengo un array, y quiero que salga cada elemento cada X tiempo, pero no consigo hacerlo, me sale todo el array directamente

 var miarray = "Ejemplo";
 miarray = Array.from(miarray);

miarray.forEach(element => {
                setInterval(function(){ console.log(element);}, 3000);
            });

Yo tenia entendido que element = una letra y se va iterando, pero me sale todo directamente, como haria para que vaya de 1 en 1?

Fernando Iam
  • 433
  • 4
  • 12
  • ¿Responde esto a tu pregunta? [¿Cómo ralentizar un loop for en javascript?](https://es.stackoverflow.com/questions/352898/c%c3%b3mo-ralentizar-un-loop-for-en-javascript) – Triby Aug 20 '20 at 23:19

2 Answers2

1

Podrías hacer uso del método setTimeout que evalúa la expresión después del tiempo que le especifiques:

Código:

const imprimirLetraCada5Segundos = (palabra) => {
  // Recorremos con un bucle cada una de las letras de la palabra:
  for (let i = 0; i <= palabra.length; i++) {
      setTimeout( () => {
        console.log(palabra[i])
      }, i * 3000)
    }
}
// Llamamos:
imprimirLetraCada5Segundos("Ejemplo");

Con tu código, sería el siguiente:

const imprimirLetraCada5Segundos = (palabra) => {
  for (let i = 0; i <= palabra.length; i++) {
      setTimeout( () =>{
        console.log(palabra[i])
      }, i * 3000)
    }
}

var miarray = "Ejemplo"
miarray = Array.from(miarray)
imprimirLetraCada5Segundos(miarray);
Adrián
  • 3,359
  • 2
  • 5
  • 24
1

para que te salga cada elemento tiene que Multiplicar al tiempo el indice de trabajo, esto lo resuelve, y utilizar la funcion setTimeout:

var miarray = "Ejemplo";
miarray = Array.from(miarray);      
miarray.forEach(function (element, index) {
  setTimeout(function(){
    console.log(index,element);
  }, index * 3000);
});

Teóricamente pienso que el foreach encapsula tambien el tiempo y cuando setTimeOut se ejecuta y verifica el tiempo que ha transcurrido en cada iteracion da como resultado que ya paso el tiempo; es por eso que tienes que multiplicarle por el indice.

ArcanisGK507
  • 3,526
  • 4
  • 16
  • 47