JavaScript - Creating an array for a knockout tournament

I want to be able to generate the blank matches for a knockout tournament. Here is an example of what I mean.

Let's say we have a knockout tournament with 8 teams: I use Math.log(teamList.length)/Math.log(2) to work out that there are 3 rounds to the tournament.

Here is a general rule for working out how many matches are in each round:

numberOfRounds = n    [ [2^n-1 matches], ...., [2^0 matches] ]

So I know from this that for an 8 team tournament will have 3 rounds, and the tournament will look like this:

[ [4 matches], [2 matches], [1 match] ]

I should point out that each match is stored as an array, so for example the semi-final of the 8 team tournament could look like the following:

[ [team1,team2], [team3,team4] ]

I am trying to generate some code which means that I can take a list of teams, and generate the set of blank matches for the tournament.

So if I pass a list of 8 teams to the tournament, the following matches array would be generated:

  [ [], [], [], [] ],
  [ [], [] ],
  [ [] ]

Does anyone have any ideas about how to do this? So far I only have the following:

for(var i = 0; i < numRounds; i++) {

This generates each round of the tournament, so for 8 teams it generates an array of length 3, but I don't know how to generate the necessary amount of matches inside each round.

This should generate an empty match array for a given number of teams:

function genMatches (nTeams) {
    var matchArray = [];
    while (nTeams > 1) {
        nTeams = (nTeams + 1) >> 1;
        var matches = [];
        for (var i = 0; i < nTeams; ++i) {
    return matchArray;

It should deal correctly with team counts that are not powers of 2. It does generate a slot for bye rounds (when there are an odd number of teams).

JavaScript - Creating an array for a knockout tournament -, i want able generate blank matches knockout tournament. here example of mean​. let's have knockout tournament 8 teams: use  Tracking array changes. Although you can subscribe to and access an observableArray just like any other observable, Knockout also provides a super-fast method to find out how an observable array has changed (i.e., which items were just added, deleted, or moved). You subscribe to array changes as follows:

Assume if any team which not paired with any team already qualify for next round

function genMatches(a, match = 0, stage = {}) {
  let isOdd = false
  if (a === 1) {
    return match;
  if (a % 2) {
    isOdd = true;
    a = a - 1;
  match = match + Math.floor(a / 2);

  stage[Object.keys(stage).length] = new Array(Math.floor(a / 2)).fill([[],[]])
  a = Math.floor(a / 2)
  if (isOdd)
    a = a + 1;
 stage = {...stage,... genMatches(a, match, stage)};
 return stage;

Tutorial: Creating a Tournament Bracket, Have some basic JavaScript skills (like using Arrays and Objects). If you don't feel really comfortable with JavaScript, this tutorial will give detailed explanations. Working with Collections Working with arrays, including nested ones; Paged grid Creating reusable components, i.e., plugins; Animated transitions Two simple ways to implement animated transitions (one of which is a custom binding) Detailed examples. Contacts editor Editing a nested list

This will give you a slot for every BYE too along with the number of BYES in KnockOut Tournament. if you want the number of matches in first round

no.of matches in first round = (teamcount - byecount)/2
total matches= teamcount -1

const tournamentArray = teamsCount => {
  let totalMatches = teamsCount - 1;
	let byeCount = 0;
	let matchStructure = [];
	let log2 = Math.log2(teamsCount);
	let floorValue = Math.floor(log2);
	if (log2 > floorValue) {
        let tempPowerHolder = Math.pow(2, floorValue + 1);
		let matches = [];
		byeCount = tempPowerHolder - teamsCount;
		teamsCount = tempPowerHolder / 2;
		for (let i = 0; i < teamsCount; ++i) {

	while (teamsCount > 1) {
		teamsCount = (teamsCount + 1) >> 1;
		let matches = [];
		for (let i = 0; i < teamsCount; ++i) {

	return {


Observable Arrays, Key point: An observableArray tracks which objects are in the array, not the state of those objects. Simply putting an object into an observableArray doesn't make  Knockout Tournament Draw Generator Use this tool to create a "cup draw" for a single-elimination (knockout, sudden death) style tournament or competition. Enter the names or initials of competitors or teams below and choose whether you'd like them randomly matched or paired for a doubles tournament.

 function matches(TotalTeams) {
        let teams = TotalTeams;
        let matches = [];
        let extraTeam = 0;

        while(teams > 1 ){
            if(teams % 2 === 1){
                teams = ((teams-1)/2);
                extraTeam  = extraTeam + 1
                teams = ((teams)/2);
            if(teams === 1){
                const add = (a, b) => a + b;
                const totalMatches = matches.reduce(add);
                return (totalMatches + extraTeam)
document.getElementById("33").innerHTML = matches(33);
document.getElementById("64").innerHTML = matches(64);
document.getElementById("69").innerHTML = matches(69);
document.getElementById("82").innerHTML = matches(82);
document.getElementById("98").innerHTML = matches(98);
33 teams will play <span id="33"></span> matches<br/>
64 teams will play <span id="64"></span> matches<br/>
69 teams will play <span id="69"></span> matches<br/>
82 teams will play <span id="82"></span> matches<br/>
98 teams will play <span id="98"></span> matches<br/>

Kata Stats: Organize a Round-robin tournament, JavaScript. Choose You are organizing a soccer tournament, so you need to build a matches table. The match is represented as an array with two teams. Arrays are a special type of objects. The typeof operator in JavaScript returns "object" for arrays. But, JavaScript arrays are best described as arrays. Arrays use numbers to access its "elements". In this example, person[0] returns John:

Tournament Tree (Winner Tree) and Binary Heap, We can attach all these sorted arrays to the tournament tree, one array per leaf. We need a We need to construct a tournament tree of height log23 .= 1.585 = 2​  Tip #3. Array manipulations made easy. There are a lot of out-of-the-box functions that make working with observable arrays (and arrays in general) very easy. Those are located in the ko.utils namespace, so a lot of people are unaware of them, as they won’t come up with intellisense after adding a “dot” after your observableArray.

Given number of matches played, find number of teams in tournament, Find a string which matches all the patterns in the given array · Find the largest number smaller than integer N with maximum number of set bits · Find minimum  For more control, pass a JavaScript object with some combination of the following properties: name — the ID of an element that contains the template you wish to render - see Note 5 for how to vary this programmatically. nodes — directly pass an array of DOM nodes to use as a template. This should be a non-observable array and note that the

d2phap/Knockout-Tournament: Knockout tournament, Knockout Tournament. The goal of this task is to simulate a single-elimination knockout tournament in the browser, determining the winner as quickly as possible  Array.from() lets you create Arrays from: array-like objects (objects with a length property and indexed elements) or iterable objects (objects where you can get its elements, such as Map and Set).

  • Awesome thanks, the problem is easy enough to think of in your head, but putting that down into a function was puzzling me for ages...appreciate the help.