midudev / aprende-javascript-problemas

Repositorio para indicar problemas en la plataforma de Aprende JavaScript
https://aprendejavascript.dev
123 stars 4 forks source link

Ejercicio Práctico de iteración de arrays en JavaScript muestra error al enviar respuesta en consola funciona #380

Open akdkito opened 9 months ago

akdkito commented 9 months ago

Hola Midu, La verdad que, antes de preguntar, quería agradecerte por los videos y los cursos, tenés una manera espectacular de explicar y super facil de entender. Ahora viene la duda.... Probé este codigo en consola y me devuelve resultado pero en el curso me da error

function sumarPares(numeros) { let suma = 0 // tu código aquí for (let i = 1; i <= numeros; i++) { if(i % 2 == 0) { suma += i } } return suma }

Gracias por todo

mele13 commented 8 months ago

Hola Midu, La verdad que, antes de preguntar, quería agradecerte por los videos y los cursos, tenés una manera espectacular de explicar y super facil de entender. Ahora viene la duda.... Probé este codigo en consola y me devuelve resultado pero en el curso me da error

function sumarPares(numeros) { let suma = 0 // tu código aquí for (let i = 1; i <= numeros; i++) { if(i % 2 == 0) { suma += i } } return suma }

Gracias por todo

Buenas, espero serte de ayuda. En primer lugar decirte que, aunque no vas mal encaminad@, es necesario que conozcas lo que estás haciendo:

function sumarPares(numeros) {
    let suma = 0
    for (let i = 1; i <= numeros; i++) {  // Problema 1
        if (i % 2 == 0) { // Problema 2
            suma += i  // Problema 3
        }
    }
    return suma
}

Problema 1:

Problema 2:

Problema 3:

Mi primera recomendación es que intentes 'debuggear', en otras palabras, verificar qué estás haciendo en cada paso para entender por qué te está dando mal el resultado, prueba este código, por ejemplo:

function sumarPares(numeros) {
    let suma = 0;
    console.log("Números: ", numeros);
    for (let i = 1; i <= numeros; i++) {
    // Ten en cuenta que i seguirá creciendo hasta llegar al valor de números
        console.log("Iteración", i, ", valor de numeros ", numeros);  
        if (i % 2 == 0) {
            console.log("Es el ínidice ", i, "par? ", i % 2 == 0);
            suma += i;
            console.log("Suma actual:", suma);
        }
    }
    return suma;
}

Si te fijas, con ese código, sólo se te va a imprimir el primer console.log... esto se debe a que no puedes comparar un array a un número. Al hacer el for (let i = 1; i <= numeros; i++) le estás diciendo que mientras let i sea menor o igual que el array de numeros, prosiga con el for. Por tanto, no entrará en el for. Para solucionarlo, tendrás que modificar el for de tal forma que let isea menor o igual que la LONGITUD del array de numeros, tal que:

function sumarPares(numeros) {
    let suma = 0;
    console.log("Números: ", numeros);
    // Se resta numeros.length - 1 porque los índices de un array comienzan desde 0
    // Para asegurar que el bucle itere sobre la longitud esperada de numeros, se resta 1
    // Si no se restara, el bucle iteraría hasta un índice que no existe en el array, causando error
    for (let i = 1; i <= numeros.length - 1; i++) { 
        console.log("Iteración", i, ", longitud de array: ", numeros.length);  
        if (i % 2 == 0) {
            console.log("Es el ínidice ", i, "par? ", i % 2 == 0);
            suma += i;
            console.log("Suma actual:", suma);
        }
    }
    return suma;
}

Bien, ahora que sabes iterar sobre el array debes entender cómo iterar sobre el valor de cada índice del array. Volvamos a recordar que dado un array [6, 7, 2, 4], el índice 0 contendrá el valor de 6, el índiice 1 contendrá el valor de 7, etc. Por tanto, para poder comparar si el número en la posición indicada es par, deberás

function sumarPares(numeros) {
    let suma = 0;
    console.log("Números: ", numeros);
    for (let i = 1; i <= numeros.length; i++) {
        console.log("Iteración", i, ", longitud de array: ", numeros.length); 
        const value = numeros[i];
        if (value % 2 === 0) {
            console.log("Es el valor", value, " del índice ", i, "par? ", value  % 2 == 0);
            suma += i;
            console.log("Suma actual:", suma);
        }
    }
    return suma;
}

Ahora que sabes iterar sobre un array y acceder al valor de cada índice, te dejaré que resuelvas el resto...

SPOILER recuerda que no tienes que sumar `let i`, sino el valor del índice del array. Por otro lado... ¡no olvides que un array empieza siempre en la posición 0!

No olvides que si te trabas en algún punto, un console.log bien puesto ayuda a solucionar muchos problemas ;) ¡Mucha suerte!