Programar un sistema de todos contra todos en JavaScript

| Última modificación: 25 de octubre de 2024 | Tiempo de Lectura: 4 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

A medida que vayas progresando en tu aprendizaje de un lenguaje de programación, te darás cuenta de que sus elementos no tienen un uso tan concreto y simple como lo que ves en los ejemplos teóricos. La verdad es que, cuando creamos proyectos de programación, combinamos muchos elementos para crear el resultado deseado. Por ello, en este post, te enseñaremos a programar un sistema de todos contra todos en JavaScript que llevará tus conocimientos a la práctica.

¿Qué es un sistema de todos contra todos?

Un sistema de todos contra todos es un sistema lógico usado comúnmente para crear competencias deportivas o ligas. Su propósito es lograr que todos los equipos de una competencia se enfrenten con todos los demás equipos por lo menos una vez. En las ligas de fútbol y baloncesto, esto suele suceder dos veces para que cada equipo pueda ser “local” una vez, una característica que sugiere una ventaja.

Dentro de este sistema, existe una tabla llamada fixture que representa los emparejamientos de una competencia. Esta tabla es la que queremos crear para programar un sistema de todos contra todos en JavaScript.

¿Cómo programar un sistema de todos contra todos en JavaScript?

Antes de programar un sistema de todos contra todos en JavaScript, deberás crear una función que defina tus variables. En nuestro caso, hemos creado una matriz con las variables de jornada (numberOfMatchDays) y partidos por jornada (numberOfMatchesPerDay), en la que cada partido tiene las claves away (visitante) y home (local). A continuación, te mostramos esta función:

scheduleMatchDays () {

const numberOfMatchDays = this.teams.lenght – 1; //número de jornadas

const numberOfMatchesPerDay = this.teams.lenght / 2; //número de partidos por jornada

for (let i = 0; i < numberOfMatchDays; i++) {

const matchDay = [ ]

for (let j = 0; j < numberOfMatchesPerDay; j++) {

let match = {home: ‘home’, away: ‘away’}

matchDay.push (match);

}

this.matchDaySchedule.push (matchDay);

}

}

Ten presente que cuando llamamos al objeto teams en esta función estamos refiriéndonos a un array con los equipos que hemos creado. Puedes crear este array con el número de elementos que desees.

Ahora, para programar un sistema de todos contra todos en JavaScript, debemos definir funciones para los partidos en función de los equipos que serán home y away. A continuación, te explicamos como escribir la función para los partidos away:

setAwayTeams ( ) {

this.matchDaySchedule.forEach (matchDay => {

matchDay (match => {

match.away =

}

Hasta ahora, esta función ha recorrido las variables que hemos definido para llegar a la clave away de nuestro objeto match. Para programar un sistema de todos contra todos tenemos que asegurar que el primer partido de cada jornada se juegue con el último equipo de la lista y, para ello, utilizamos el índice del array:

setAwayTeams ( )

const teamNames = this.teams.map (team => team.name); //array de nombres de equipo

const maxAwayTeams = this.teams.length -1;

this.matchDaySchedule.forEach (matchDay => {

matchDay.forEach (function (match, index) {

// los arrays empiezan las posiciones en 0

if (index === 0) {

match.away =teamNames [maxAwayTeams]

Ahora, para el resto de partidos de la jornada, tenemos que crear una función en la que los equipos que están como visitantes sean los equipos del array de manera decreciente. Una vez se acabe este recorrido, el loop o bulce comenzará de nuevo en el último equipo hasta llegar al primero. Para ello, crearemos la condición else, que nos dirá qué sucede cuando no estamos hablando de la posición 0 del array. Las siguientes líneas suceden en la misma función:

if (index === 0) {

match.away =teamNames [maxAwayTeams]

} else {

// para el resto de partidos que no son el primero

match.away = teamNames [ teamIndex]

}

No olvides que antes deberemos crear la variable teamIndex que queremos insertar. Entonces, insertaremos la siguiente línea de código justo después de las constantes expresadas arriba. Esto hará que la función empiece en el penúltimo valor del array.

let teamIndex = this.teams.length -1 -1;

Ahora, para crear el bucle en el que el valor de teamIndex decrece, deberemos utilizar el operador aritmético —. Para ello, basta con insertar teamIndex– justo antes del cierre de la función.

Por tanto, la función para programar un sistema de todos contra todos en JavaScript para los equipos visitantes será la siguiente:

setAwayTeams ( )

const teamNames = this.teams.map (team => team.name); //array de nombres de equipo

const maxAwayTeams = this.teams.length -1;

let teamIndex = this.teams.length -1 -1;

this.matchDaySchedule.forEach (matchDay => {

matchDay.forEach (function (match, index) {

// los arrays empiezan las posiciones en 0

if (index === 0) {

match.away =teamNames [maxAwayTeams]

// para el resto de partidos que no son el primero

match.away = teamNames [ teamIndex];

teamIndex–;

}

Para terminar de programar un sistema de todos contra todos en JavaScript, tendrás que crear la misma función pero con un índice que incremente. Así, definirás la progresión de la variable home o local.

¿Qué sigue?

Ahora que sabes cómo programar un sistema de todos contra todos en JavaScript, te invitamos a revisar tus conocimientos con más ejercicios como este. Para ello, te recomendamos nuestro Desarrollo Web Full Stack Bootcamp. En él, no solo aprenderás a dominar lenguajes de programación como JavaScript, HTML y CSS, sino también todo lo necesario para ser un experto en desarrollo web. ¡Matricúlate ya!

Alberto Casero

Alberto Casero es CTO en Watium, Fundador de Kas Factory & Coordinador del Bootcamp en Desarrollo Web.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Desarrollo Web

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado