Ejercicio: Encuentra al ganador de una rifa

Clase 58 de 80Curso de JavaScript Desde Cero

Contenido del curso

Primeros Pasos

Funciones y This

Resumen

Buscar elementos dentro de un arreglo es una tarea frecuente en programación, y JavaScript ofrece métodos específicos que facilitan esta labor. A través de un ejercicio práctico de verificación de ganadores de una rifa, se exploran dos métodos fundamentales: find y findIndex, aplicados sobre un arreglo de objetos con datos reales como nombre y número de tiquete.

¿Cómo estructurar una lista de participantes ganadores?

El primer paso consiste en definir una constante llamada winningParticipants que almacena un arreglo de objetos [0:52]. Cada objeto representa a un participante con tres propiedades: un id, un name y un ticketNumber. Esta estructura permite agrupar múltiples datos relacionados dentro de un mismo elemento.

javascript const winningParticipants = [ { id: 1, name: "Jennifer", ticketNumber: "001" }, { id: 15, name: "Michael", ticketNumber: "008" }, { id: 15, name: "Emily", ticketNumber: "013" }, { id: 47, name: "Charlie", ticketNumber: "047" } ];

Cada participante es un objeto literal con pares clave-valor. Esta forma de organizar datos resulta muy útil cuando se necesita acceder a propiedades específicas mediante la notación de punto.

¿Cómo buscar un ganador por nombre usando find?

El método find recorre el arreglo y devuelve el primer elemento que cumple la condición indicada [2:30]. Se crea una función findWinnerByName que recibe un nombre como parámetro y lo compara con la propiedad name de cada participante.

javascript function findWinnerByName(name) { const winner = winningParticipants.find( participant => participant.name === name ); return winner || "No winner found with this name"; }

El operador lógico || actúa como alternativa: si find no encuentra coincidencias, retorna undefined, y entonces se devuelve la cadena de texto indicando que no hay ganador [3:28]. Este patrón de valor por defecto es muy común para manejar resultados vacíos sin que el programa falle.

¿Cómo localizar un ganador por número de tiquete con findIndex?

A diferencia de find, el método findIndex no retorna el elemento sino su posición dentro del arreglo [4:10]. Se crea la función findIndexWinnerByTicket que recibe el ticketNumber como parámetro.

javascript function findIndexWinnerByTicket(ticketNumber) { const index = winningParticipants.findIndex( participant => participant.ticketNumber === ticketNumber ); return index !== -1 ? index : "No winner found with that ticket number"; }

Cuando findIndex no encuentra el elemento, retorna -1 [5:20]. Por eso se valida con !== -1: si es diferente de menos uno, el participante existe y se devuelve su índice. Si no, se retorna el mensaje de error. El operador ternario simplifica esta lógica en una sola línea.

¿Cómo mostrar la información del ganador?

Se define una función displayWinnerInformation que recibe al ganador y valida que sea diferente de undefined, de null y del mensaje de no encontrado [6:35].

javascript function displayWinnerInformation(winner) { if (winner !== undefined && winner !== null && winner !== "No winner found") { console.log("Winner information:", winner); } else { console.log("No winner found"); } }

Esta triple validación garantiza que solo se imprima información cuando realmente exista un ganador válido.

¿Qué resultados arroja la ejecución?

Al buscar por nombre con "Emily", el programa retorna el objeto completo con su id, name y ticketNumber [8:00]. Al buscar por un tiquete inexistente como "005", devuelve el mensaje de que no se encontró ganador. Cambiando a "008", el resultado es el índice 1, confirmando que Michael ocupa esa posición en el arreglo [9:05].

javascript const winnerByName = findWinnerByName("Emily"); const indexWinnerByTicket = findIndexWinnerByTicket("008");

displayWinnerInformation(winnerByName); console.log("Index of winner by ticket number:", indexWinnerByTicket);

La diferencia práctica entre ambos métodos es clara: find entrega el objeto completo, mientras que findIndex entrega la posición numérica. Elegir uno u otro depende de si necesitas los datos del elemento o su ubicación dentro del arreglo. ¿Qué otros métodos de búsqueda en arreglos has utilizado en tus proyectos?