2015-08-19 1 views
-1

cravate J'apprends JS et je fais une application pour trouver les gagnants par trou dans un jeu de golf. Le joueur avec le moins de coups est le gagnant du trou, mais parfois plus d'un joueur peut attacher le trou avec le même nombre de coups, donc, pour trouver le vainqueur du trou, j'ai besoin d'évaluer le nombre de coups des joueurs le prochain trou et casser la cravate, si la cravate persiste, je dois évaluer le prochain trou et ainsi de suite.Pause fonction js

La fonction foo retourne un tableau avec l'index, la position ou les noms du gagnant ou les gagnants du trou (si le lien était impossible de rompre).

Voici mon code:

var players = [ 
    "Jug 1", 
    "Jug 2", 
    "Jug 3", 
    "Jug 4" 
]; 

var arrHoyos = [ 
    [4, 3, 3, 4], 
    [4, 5, 4, 5], 
    [4, 4, 5, 6] 
]; 

function foo(array) { 
    var arrWinners = []; 
    //arrHoyos 
    for (var i = 0, len = array.length; i < len; i++) { 
     var arr = array[i]; 
     var arr2 = array[(i + 1) % array.length]; 
     var pos = 0; 
     var min = 0; 
     var tie = false; 
     var temp = []; 
     var temp2 = []; 
     min = Math.min.apply(null, arr); 
     //arr 
     for (var j = 0, len2 = arr.length; j < len2; j++) { 
      if (min == arr[j]) { 
       temp.push(arr.indexOf(min, j)); 
      } 
     } 
     if (temp.length > 1) { 
      tie = true; 
      var counter = 0; 
      while (tie == true) { 
       for (var count = 0; count < temp.length; count++) { 
        pos = temp[count]; 
        temp2[count] = arr2[pos]; 
       } 
       min = Math.min.apply(null, temp2); 
       for (var count2 = 0; count2 < temp.length; count2++) { 
        if (temp2[count2] != min) { 
         temp.slice(count2, 1); 
        } 
       } 
       if (temp.length == 1 || counter == array.length) { 
        tie = false; 
       } 
       counter++; 
      } 
     } 
     arrWinners[i] = players[temp[0]]; 
     console.log(temp, temp2); 
     console.log(arrWinners[i]); 
    } 
} 

foo(arrHoyos); 

Chrome résultat de la console:

[1, 2] [5, 4] 
Jug 2 
[0, 2] [4, 5] 
Jug 1 
[0, 1] [4, 3] 
Jug 1 
+0

Quel est le problème avec le code tel qu'il est maintenant? Je –

+0

obtenir ce résultat: – Devsalad

+0

Il est incomplet, je viens d'obtenir les positions (index) des meilleurs scores par trou. J'ai besoin de connecter la valeur de ces positions (temp) et les valeurs de ces index dans le trou suivant (array) pour casser le tableau actuel tie et left temp avec un seul index. – Devsalad

Répondre

1

Le principal problème ici est que vous utilisez slice au lieu de splice. Peut-être même été une faute de frappe. Vous n'augmentez probablement pas l'index entier lorsque vous utilisez temp2 à l'intérieur de la boucle. J'ai le sentiment que c'est toujours le trou suivant.

notes secondaires/recommandations:

  1. Apprenez à utiliser débogueur.
  2. Utilisez des noms significatifs pour les variables. temp, temp2, arr et d'autres ne sont pas bonnes.

EDIT: inclure le code réel avec correct splice utilisation

var players = [ 
    "Jug 1", 
    "Jug 2", 
    "Jug 3", 
    "Jug 4" 
]; 

var arrHoyos = [ 
    [4, 3, 3, 4], 
    [4, 5, 4, 5], 
    [4, 4, 5, 6] 
]; 

function foo(array) { 
    var arrWinners = []; 
    //arrHoyos 
    for (var i = 0, len = array.length; i < len; i++) { 
     var arr = array[i]; 
     var arr2 = array[(i + 1) % array.length]; 
     var pos = 0; 
     var min = 0; 
     var tie = false; 
     var temp = []; 
     var temp2 = []; 
     min = Math.min.apply(null, arr); 
     //arr 
     for (var j = 0, len2 = arr.length; j < len2; j++) { 
      if (min == arr[j]) { 
       temp.push(arr.indexOf(min, j)); 
      } 
     } 
     if (temp.length > 1) { 
      tie = true; 
      var counter = 0; 
      while (tie == true) { 
       for (var count = 0; count < temp.length; count++) { 
        pos = temp[count]; 
        temp2[count] = arr2[pos]; 
       } 

       min = Math.min.apply(null, temp2); 
       for (var count2 = 0; count2 < temp.length; count2++) { 
        if (temp2[count2] != min) { 
         temp.splice(count2, 1); 
        } 
       } 
       if (temp.length == 1 || counter == array.length) { 
        tie = false; 
       } 
       counter++; 
      } 
     } 
     arrWinners[i] = players[temp[0]]; 
     console.log(temp, temp2); 
     console.log(arrWinners[i]); 
    } 
} 

foo(arrHoyos); 
+0

Merci, je vais regarder quelques vidéos de débogage et essayer de le réparer. – Devsalad

+0

Super, le 'splice' fonctionne bien, je vais tester ce qui se passe quand les cravates sont impossibles à casser. Merci. :) – Devsalad

1

Je suis la réponse, merci Danil, votre aide a été utile. :)

var players = [ 
    "Jug 1", 
    "Jug 2", 
    "Jug 3", 
    "Jug 4" 
]; 

var arrFieldStrokes = [ 
    [3, 3, 3, 3], 
    [5, 5, 5, 5], 
    [5, 6, 5, 5], 
    [5, 7, 6, 5], 
    [4, 5, 5, 4], 
    [4, 5, 6, 8], 
    [4, 6, 6, 5], 
    [4, 5, 9, 5], 
    [4, 4, 4, 4] 
]; 

function breakTie(hole, arrTiedPlayers, arrField) { 
    for (var i = 0; i < arrField.length; i++) { 
     var min = 0, count = 0; arrNextScore = []; 
     for (var j = 0; j < arrTiedPlayers.length; j++) { 
      arrNextScore[j] = arrField[(hole + i + 1) % arrField.length][arrTiedPlayers[j]]; 
     } 
     min = Math.min.apply(null, arrNextScore); 
     count = arrNextScore.length; 
     while (count--) { 
      if (arrNextScore[count] != min) { 
       arrTiedPlayers.splice(count, 1); 
      } 
     } 
     if (arrTiedPlayers.length == 1) { 
      return players[arrTiedPlayers[0]]; 
     } 
    } 
    var tiePlayers = []; 
    for (var c = 0; c < arrTiedPlayers.length; c++) { 
     tiePlayers[c] = players[arrTiedPlayers[c]]; 
    } 
    return tiePlayers; 
} 

function winners(arrField) { 
    var arrWinners = []; 
    for (var i = 0; i < arrField.length; i++) { 
     var min = 0, arrTiedPlayers = []; 
     min = Math.min.apply(null, arrField[i]); 
     for (var j = 0; j < arrField[i].length; j++) { 
      if (arrField[i][j] == min) { 
       arrTiedPlayers.push(arrField[i].indexOf(min, j)); 
      } 
     } 
     if (arrTiedPlayers.length == 1) { 
      arrWinners[i] = players[arrTiedPlayers[0]]; 
      console.log("Hoyo-" + (i + 1) + " Winner: " + arrWinners[i]); 
     } 
     else { 
      arrWinners[i] = breakTie(i, arrTiedPlayers, arrField); 
      console.log("Hoyo-" + (i + 1) + " Winner: " + arrWinners[i]); 
     } 
    } 
} 

winners(arrFieldStrokes);