Sé que la mejor manera de crear una matriz que vaya de 1 a 50 y luego de 49 a 1 serían 2 bucles, pero este ejercicio requiere que usemos solo 1 bucle.
let myArr = []; let reachedFifty = false; let x = 1; for(i=0;i<100;i++){ if(x == 50){ reachedFifty = true; } myArr[i] = x; if(reachedFifty){ x--; } else{ x++; } }Esto logró la tarea, pero el instructor dijo que estoy usando demasiados condicionales y que hay mejores soluciones.
Podemos usar las propiedades de la lista para hacer esto más eficiente:
Después de llenar la lista con valores, se vería así:
[1,2,3,4,.....,4,3,2,1]¡Podemos ver aquí que la lista es simétrica! Al usar esta propiedad, cada vez que agregamos un valor en el lado "izquierdo", podemos reflejarlo en el lado derecho:
let myArr = []; for (let i = 0; i < 50; i++) { myArr[i] = i + 1; myArr[98 - i] = i + 1; } console.log(myArr) .as-console-wrapper { max-height: 100% !important; } Observe cómo estamos usando el índice en 98 - i para reflejar los cambios. Esto se debe a que, dado que habrá 99 valores totales, el valor en el índice 0 debería reflejarse en el índice 98, 1 a 97, etc.
¡Espero que esto haya ayudado a responder a tu pregunta! Por favor, hágamelo saber si necesita más detalles o aclaraciones :)
¿Por qué usar bucles en absoluto?
const max = 50 const t1 = performance.now() const arr = Array.from({ length: max * 2 - 1 }, (_, i) => max - Math.abs(i - (max - 1))) console.log(`Took ${performance.now() - t1}ms`) console.info(arr) .as-console-wrapper { max-height: 100% !important; }Esto funciona llenando una matriz de longitud 99 con la evaluación de la expresión
50 - |index - 49|Por ejemplo
i = 0 -> 50 - |-49| = 50 - 49 = 1i = 1 -> 50 - |-48| = 50 - 48 = 2i = 49 -> 50 - |0| = 50 - 0 = 50i = 50 -> 50 - |1| = 50 - 1 = 49i = 98 -> 50 - |49| = 50 - 49 = 1Otra solución es que podría verificar i en lugar de x , de esa manera solo tendrá un si y no necesitará una variable booleana.
let myArr = []; let x = 1; for(i=0;i<100;i++){ myArr[i] = x; if(i >= 49){ x--; } else{ x++; } }Pero creo que el enfoque de lista simétrica es mejor.