es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo se puede registrar un elemento de un bucle anidado cada segundo durante al menos un minuto en Javascript?

let innerArrayOne = [1,"red","fed"]

let innerArrayTwo = [2,"blue","you"]

let innerArrayThree = [3,"green","bean"]

let innerArrayFour = [4,"yellow","fellow"]

let arrayS = [innerArrayOne,innerArrayTwo,innerArrayThree, innerArrayFour]

for(let i = 0; i < arrayS.length; i++){
      console.log("----")
      console.log(arrayS[i][0])
      console.log("----")
      for(let j = 1; j < arrayS[i].length;j++)
      console.log(arrayS[i][j])
}

Aquí tienes lo que he intentado hasta ahora:

for(let i = 0; i < arrayS.length; i++){
      console.log("----")
      console.log(arrayS[i])
      console.log("----")
      for(let j = 0; j < arrayS[i].length;j++)
      console.log(arrayS[i][j])
}

Aquí tienes los datos de prueba que he creado. Aquí tienes lo que he intentado hasta ahora. Esto te muestra cada elemento en el array.

function loop(count, callback, done) {
  let counterForLoop = 0;

  let next = function () {setTimeout(iteration, 500);};

  let iteration = function () {
      if (counterForLoop < count) { callback(counterForLoop, next);
      } else { done && done();}

  counterForLoop++; 
}

iteration();
}

loop(10000, function (i, next) {next();})

loop(9, function (i, nextI) {
  console.log("----")
  console.log(i)
  console.log("----")
  loop(3, function (j, nextJ) {
  console.log(arrayS[i][j]);nextJ();
}, nextI);});

Esto es de la única otra pregunta en StackOverflow a la que he consultado. Funciona, pero termina después del último elemento del primer array. No entiendo completamente la recursión, así que cada vez que he intentado editar, como configurar el contador a cero después de alcanzar 8, falla. Me gustaría que la salida fuera

1 
red 
fed
2
blue
you
....

Con un elemento saliendo cada segundo durante uno o dos minutos, y el bucle, una vez que llega al final, solo necesita repetirse.

¿Alguna idea o qué debo investigar?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para lograr la salida deseada, puedes usar bucles anidados con setTimeout para imprimir un elemento a la vez en un intervalo especificado. Aquí está el código que puede lograr esto:

    function printArrayElements(array, delay) {
      let i = 0;
      let j = 0;
    
      let intervalId = setInterval(() => {
        console.log(array[i][j]);
    
        j++;
        if (j === array[i].length) {
          i++;
          j = 0;
        }
    
        if (i === array.length) {
          i = 0;
        }
      }, delay);
    
      return intervalId;
    }
    
    let delay = 1000; // demora de 1 segundo
    let intervalId = printArrayElements(arrayS, delay);
    
    // Para detener el bucle después de cierto tiempo (aquí 2 minutos)
    setTimeout(() => {
      clearInterval(intervalId);
    }, 120000);
    

    Este código utiliza la función setInterval para imprimir repetidamente un elemento a la vez del array dado con un retraso especificado. Utiliza dos contadores i y j para realizar un seguimiento del elemento actual en el array anidado. Una vez que se imprimen todos los elementos del array interno, los contadores se mueven al siguiente array interno y continúan hasta que se imprimen todos los elementos. Luego, el bucle comienza de nuevo desde el principio.

    Para detener el bucle después de cierto tiempo, utilizamos la función clearInterval para eliminar el intervalo definido después del tiempo especificado (2 minutos en este ejemplo). Puedes ajustar el retraso y el tiempo según tus requisitos.

Comments are closed.