function TotalAwards(fullName){ var medals = getColumn("Olympic Medals", "Medal"); var firstName = getColumn("Olympic Medals", "Athlete First Name"); var lastName = getColumn("Olympic Medals", "Athlete Last Name"); for(var i=0; i<medals.length; i++){ if (firstName[i] + " " + lastName[i] == fullName){ return medals[i]; } } return "Not found"; }Entonces, este código es para llamar a los premios ganados por un ganador en particular. Lo que está mal aquí es que solo obtiene el primer premio del ganador. los premios segundo, tercero y cuarto no están incluidos. ¿Alguien puede ayudarme a arreglar esto?
console.log (TotalAwards(" Mathew Helm", true));cuando probé con el registro de la consola para enumerar los premios de Mathew Helm, solo imprime su primera medalla, que es de plata. Los otros premios que recibió en los últimos años no están impresos.
Solo obtiene el primer premio del ganador porque llama return si se cumple la primera condición. La solución es agregar los valores a una matriz y devolver el resultado.
function totalAwards(fullName) { var medals = getColumn("Olympic Medals", "Medal"); var firstName = getColumn("Olympic Medals", "Athlete First Name"); var lastName = getColumn("Olympic Medals", "Athlete Last Name"); var result = []; for (var i = 0; i < medals.length; i++) { if (firstName[i] + " " + lastName[i] === fullName) { result.push(medals[i]); } } return result; }Una alternativa al bucle for es la función de filtro. Puede leer más sobre esto en los documentos de mdn . Sería algo como esto:
function totalAwards(fullName) { const medals = getColumn("Olympic Medals", "Medal"); const firstName = getColumn("Olympic Medals", "Athlete First Name"); const lastName = getColumn("Olympic Medals", "Athlete Last Name"); return medals.filter((medal, index) => { return firstName[index] + " " + lastName[index] === fullName }) } Estoy usando la declaración de variables const porque const y let son la forma recomendada de declarar variables en JavaScript. Este capítulo de Información de JavaScript lo explica muy bien y en este profundizan en las diferencias .
Esto se debe a que sales del bucle en el primer partido. Lo que necesita es cargar los resultados en una matriz y devolverlos en su lugar:
function TotalAwards(fullName) { var medals = getColumn("Olympic Medals", "Medal"); var firstName = getColumn("Olympic Medals", "Athlete First Name"); var lastName = getColumn("Olympic Medals", "Athlete Last Name"); let result = []; for (var i = 0; i < medals.length; i++) { if (firstName[i] + " " + lastName[i] == fullName) { result.push(medals[i]); } } return result; }function TotalAwards(fullName){ const medals = getColumn("Olympic Medals", "Medal"); const firstName = getColumn("Olympic Medals", "Athlete First Name"); const lastName = getColumn("Olympic Medals", "Athlete Last Name"); let result = [] medals?.map((medal, index) => { firstName[index] + " " + lastName[index] == fullName && result.push(medal) }) if (result.length === 0) { return "Not found"; } return result; } Creo que funciona correctamente, es mejor usar const en lugar de var y let que el valor de la variable cambie su valor durante el progreso. El operador condicional '?' verifique que existan medallas, de lo contrario no se repetirá.