Mi problema:
Tengo una matriz llamada "días de la semana":
const weekdays = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"];
Imagina que es sábado y quiero saber cuántos días faltan para el martes (obviamente 3 días). ¿Cómo puedo recorrer la matriz, comenzando en "Sábado" y continuar desde el principio hasta llegar a "Mar"?
Mi código hasta ahora:
const weekdays = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]; const start = weekdays.indexOf("Sat"); const end = weekdays.indexOf("Tue"); let howManyDays = 0; for (let i = start; i < end; i = (i + 1) % weekdays.length) { howManyDays = howManyDays + 1; }Sin embargo, parece ser que "howManyDays" sigue siendo 0 cuando ejecuto el código en la consola en el navegador.
Para que esto funcione correctamente, debemos tener en cuenta el ajuste de matrices, lo cual no hice en mi respuesta inicial.
Así que dejaré aquí una solución similar a la ya existente.
const howManyDaysBetween = (start, end) => { const weekdays = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]; let howManyDays = 0; for (let i = weekdays.indexOf(start); i !== weekdays.indexOf(end); i++) { i = i % weekdays.length; howManyDays++; } console.log(`How many days between ${start} and ${end}?: ${howManyDays}`); } howManyDaysBetween("Sat", "Tue") howManyDaysBetween("Tue", "Sat") howManyDaysBetween("Mon", "Sun") howManyDaysBetween("Fri", "Wed")Este bucle parece más apropiado para la pregunta formulada. Aunque es un poco tonto si ejecutas 2 indexOf ya obtuviste la distancia. solo necesita restar y modular la longitud de la matriz. Pero este enfoque es bueno para el ciclo, porque puede comparar los valores a medida que avanza hasta que encuentre "Tue"
const weekdays = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]; const start = weekdays.indexOf("Sat"); const end = weekdays.indexOf("Tue"); let howManyDays = 0; for (let i = start; i != end; i++) { i = i % weekdays.length; howManyDays = howManyDays + 1; } console.log(howManyDays)const weekdays = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]; const length = weekdays.length; // 7 const start = weekdays.indexOf("Sat"); // 5 const end = weekdays.indexOf("Tue"); // 1 let numOfDays = 0; // If start comes after end, then we can take the difference between the start and the length, // and add that to the end. if (start > end) { numOfDays = (length - start) + end; // (7 - 5) + 1 // 3 } // If start is before end, then just subtract one from the other. if (start < end) { numOfDays = end - start; } // If the start and end are the same, then it's 0, which is what our variable was initialised as. return numOfDays; // 0 La única consideración es si desea que el mismo día sea 0 , como en el ejemplo, o 7 , si es la próxima semana.