通过angularjs / Javascript中的评级将Devide玩家分成两个团队

时间:2016-12-21 12:16:53

标签: javascript angularjs algorithm

我有一系列玩家名称和等级的玩家。

$scope.players = [
  {"name": "Qasim", "rating": "10"}, 
  {"name": "Mahsam", "rating": 10}, 
  {"name": "Aj", "rating": 3}, 
  {"name": "Osman", "rating": 7}, 
  {"name": "Usama", "rating": 7}, 
  {"name": "Bilal", "rating": 3}
]

我需要根据他们的评分将球员分成两队。

var playerLength = $scope.players.length,
grouped = _.groupBy($scope.players,function(item){return item.rating});

我希望将两队中的球员分成两组平衡的球员。

3 个答案:

答案 0 :(得分:1)

这是制作团队的一种方式。我遍布所有玩家并将玩家推向最弱的团队。

这是JSFiddle demo,比摘录更具可读性。



var myApp = angular.module('myApp', []);
myApp.controller('MyCtrl', ['$scope', function($scope) {
  $scope.players = [{
    "name": "Qasim",
    "rating": 10
  }, {
    "name": "Mahsam",
    "rating": 10
  }, {
    "name": "Aj",
    "rating": 3
  }, {
    "name": "Osman",
    "rating": 7
  }, {
    "name": "Usama",
    "rating": 7
  }, {
    "name": "Bilal",
    "rating": 3
  }];

  $scope.team1 = [];
  $scope.team2 = [];

  $scope.createTeams = function() {
    angular.forEach($scope.players, function(player) {
      if ($scope.teamStrength($scope.team1) < $scope.teamStrength($scope.team2)) {
        $scope.team1.push(player);
      } else {
        $scope.team2.push(player);
      }
    });
  }

  $scope.teamStrength = function(team) {
    var sum = 0;
    if(team.length == 0) return 0;
    for(var i = 0; i < team.length; i++) {
      sum += team[i].rating;
    }
    return sum;
  };
}]);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<div ng-app="myApp">
  <div ng-controller="MyCtrl">
    <button ng-click="createTeams()">Create teams!</button>
    
    <h1>Team 1</h1>
    <div ng-repeat="p in team1">
      {{p.name}} ({{p.rating}})
    </div>
    
    <h1>Team 2</h1>
      <div ng-repeat="p in team2">
    {{p.name}} ({{p.rating}})
    </div>
  </div>
</div>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

var playerArr = {};
var rateArr = []
var leftTeam = [];
var rightTeam = [];

for(id in $scope.players){
    playerArr[$scope.players[id].rating] = $scope.players[id];
rateArr.push($scope.players[id].rating);
}
rateArr.sort();
for(i = 0; i < rateArr.length; i+=2) {
    leftTeam.push({name:playerArr[rateArr[id]].name, rating: playerArr[rateArr[id]].rating});
}
for(i = 1; i<rateArr.length; i+=2){ 
    rightTeam.push({name.playerArr[rateArr[id]].name, rating: playerArr[rateArr[id]].rating;
}

答案 2 :(得分:-2)

一种方法:

更新:已进行更改以匹配问题。

{{1}}

:)