mikey- / team-up

Sorts players into equivalent teams based on performance rating

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

team-up

Sorts players into equivalent teams based on performance rating

NPM

Build Status Dependencies Dev dependencies

using in your project

teamUp = require('team-up');

Ever wanted a programatic way to sort players into teams?

team-up allows you to pass in an array of players and have them automatically sorted into teams

Players will be first sorted in descending order by their performance attribute. Then distributed into teams

teamUp.sort(players, [options])

  • players (Array): The array of players to sort.
  • options Optional
    • numberOfTeams Number, Optional, Default: 2
    • sorter String, Optional, Default: schoolyard
    • field String, Optional, Default: performance
    • sortBy Function, Optional

Returns the sorted teams

Default sort

var players = [
  {id: 1, performance: 10, gamesPlayed: 3},
  {id: 2, performance: 30, gamesPlayed: 1},
  {id: 3, performance: 20, gamesPlayed: 4},
  {id: 4, performance: 50, gamesPlayed: 2}
]

var teams = teamUp.sort(players);

teams.should.eql(
  [{
    players: [
      {id: 4, performance: 50},
      {id: 3, performance: 20}
    ]
  },{
    players: [
      {id: 2, performance: 30},
      {id: 1, performance: 10}
    ]
  }]
)

Specifying field to sort by

var players = [
  {id: 1, performance: 10, gamesPlayed: 3},
  {id: 2, performance: 30, gamesPlayed: 1},
  {id: 3, performance: 20, gamesPlayed: 4},
  {id: 4, performance: 50, gamesPlayed: 2}
]

var teams = teamUp.sort(players, {field: 'gamesPlayed'});

teams.should.eql(
  [{
    players: [
      {id: 3, performance: 20, gamesPlayed: 4},
      {id: 4, performance: 50, gamesPlayed: 2}
    ]
  },{
    players: [
      {id: 1, performance: 10, gamesPlayed: 3},
      {id: 2, performance: 30, gamesPlayed: 1}
    ]
  }]
)

Specifying sortBy function

var players = [
  {id: 1, performance: 10, gamesPlayed: 3},
  {id: 2, performance: 30, gamesPlayed: 1},
  {id: 3, performance: 20, gamesPlayed: 4},
  {id: 4, performance: 50, gamesPlayed: 2}
]

var sortBy = function(player, index) {
  return player.id + player.gamesPlayed
}

var teams = teamUp.sort(players, {field: 'gamesPlayed'});

teams.should.eql(
  [{
    players: [
      {id: 3, performance: 20, gamesPlayed: 4},
      {id: 1, performance: 10, gamesPlayed: 3}
    ]
  },{
    players: [
      {id: 4, performance: 50, gamesPlayed: 2},
      {id: 2, performance: 30, gamesPlayed: 1}
    ]
  }]
)

Specifying numberOfTeams

var players = [
  {id: 1, performance: 10, gamesPlayed: 3},
  {id: 2, performance: 30, gamesPlayed: 1},
  {id: 3, performance: 20, gamesPlayed: 4},
  {id: 4, performance: 50, gamesPlayed: 2}
]

var teams = teamUp.sort(players, {numberOfTeams: 4});

teams.should.eql(
  [{
    players: [
      {id: 4, performance: 50}
    ]
  },{
    players: [
      {id: 2, performance: 30}
    ]
  },{
    players: [
      {id: 3, performance: 20}
    ]
  },{
    players: [
      {id: 1, performance: 10}
    ]
  }]
)

sorters

Currently only supports schoolyard sort.

schoolyard sort

Modeled after the old-fashioned method used by kids to divide into teams. Where 2 captains are nominated who each take it in turn to choose the next best player until there are no players remaining.

About

Sorts players into equivalent teams based on performance rating


Languages

Language:CoffeeScript 98.6%Language:JavaScript 1.4%