Array pu sh .Применить, чтобы добавить раунды светильников? - PullRequest
0 голосов
/ 22 марта 2020

Я изменил свою первую программу javascript, чтобы массив футбольных матчей строился на основе переменной 'раундов' (количество раз, когда команды играли друг с другом), а не жестко ее кодировал.

Хотя приспособления, кажется, генерируют отлично, это только производит правильную таблицу лиги для 2 раундов. Для 3 и более раундов код не может прочитать результаты, введенные в таблицу html для раундов 1 и 2, но может начиная с 3 раунда?

Вот код для генерации приборов:

var players = ["P1", "P2", "P3"];
var rounds = 3;
var oddRound = [
  [players[0],,,players[1]],
    [players[0],,,players[2]],
    [players[1],,,players[2]]
  ];
var evenRound = [
  [players[1],,,players[0]],
    [players[2],,,players[0]],
    [players[2],,,players[1]]
  ];

var Fixtures = [];
Fixtures.length=0;
for (i = 1; i <= rounds; i++) {
  if (i & 1) {
     Array.prototype.push.apply(Fixtures, oddRound);
  } else {
     Array.prototype.push.apply(Fixtures, evenRound);
  }
}

А вот код для расчета таблицы лиги:

// Update Fixtures with scores from html table

for (i = 0; i < Fixtures.length; i++) {

        Fixtures[i][1] = table.rows[i].cells[1].children[0].value;
        Fixtures[i][2] = table.rows[i].cells[2].children[0].value;
    }


    /*
     * Iterate through Fixtures
     * Update rows 1-7 of League i.e Pld,W,D,L,F,A,Pts
     */

    var pld = 0;
    var wins = 0;
    var draws = 0;
    var loses = 0;
    var goalsF = 0;
    var goalsA = 0;
    var gd = 0;
    var fpg = 0;
    var apg = 0;
    var pts = 0;
    var r = 0;

    var League = [
        ["Overall", "P", "W", "D", "L", "F", "A", "GD", "Pts"],
        [players[0], , , , , , , ],
        [players[1], , , , , , , ],
        [players[2], , , , , , , ]
    ];


    for (p = 0; p < players.length; p++) {
      for (i = 0; i < Fixtures.length; i++) {
        if (Fixtures[i][1] !== "") {
                if (Fixtures[i][0] == players[p]) {
                    pld++;
                    goalsF = +goalsF + +Fixtures[i][1];
                    goalsA = +goalsA + +Fixtures[i][2];
                    gd = (goalsF - goalsA);
                    fpg = goalsF / pld;
                    apg = goalsA / pld;
                    if (parseInt(Fixtures[i][1]) > parseInt(Fixtures[i][2])) {
                        wins++;
                        pts = +pts + 3;
                    } else if (parseInt(Fixtures[i][1]) < parseInt(Fixtures[i][2])) {
                        loses++;
                    } else {
                        draws++;
                        pts++;
                    }
                }
            }
            if (Fixtures[i][1] !== "") {
                if (Fixtures[i][3] == players[p]) {
                    pld++;
                    goalsF = +goalsF + +Fixtures[i][2];
                    goalsA = +goalsA + +Fixtures[i][1];
                    gd = (goalsF - goalsA);
                    fpg = goalsF / pld;
                    apg = goalsA / pld;
                    if (parseInt(Fixtures[i][1]) < parseInt(Fixtures[i][2])) {
                        wins++;
                        pts = +pts + 3;
                    } else if (parseInt(Fixtures[i][1]) > parseInt(Fixtures[i][2])) {
                        loses++;
                    } else {
                        draws++;
                        pts++;
                    }
                }
            }
        }
        r = p + 1;
        League[r][1] = pld;
        League[r][2] = wins;
        League[r][3] = draws;
        League[r][4] = loses;
        League[r][5] = goalsF;
        League[r][6] = goalsA;
        League[r][7] = gd;
        League[r][8] = pts;

        Attack[r][1] = pld;
        Attack[r][2] = goalsF;
        Attack[r][3] = fpg.toFixed(1);

        Defence[r][1] = pld;
        Defence[r][2] = goalsA;
        Defence[r][3] = apg.toFixed(1);

        var pld = 0;
        var wins = 0;
        var draws = 0;
        var loses = 0;
        var goalsF = 0;
        var goalsA = 0;
        var gd = 0;
        var fpg = 0;
        var apg = 0;
        var pts = 0;
        var r = 0;
    }

А вот связанный HTML:

<html>
<body>

<h1>JFF 2020</h1>

<h4>v0.7.3a</h4>

<input type="button" value="Update" onclick="update()">

<div>
<table id="matches" border="2" style="float:left"> </table>
</div>

<div>
<table id="standings" border="2"> </table>
</div>

<div>
<table id="standings2" border="2"> </table>
</div>

<div>
<table id="standings3" border="2"> </table>
</div>

<script src="jff 0.7.3a.js"></script>

</body>
</html>

И, наконец, вот результаты, которые я получаю:

  • 2 раунда и все 6 приборов отлично читаются

  • 3 раунда и первые 3 матча (раунд # 1) являются «невидимыми»?

  • 3 раунда и только 4-й раунд (раунд # 2) читается?

enter image description here

enter image description here

enter image description here

Код, который создает таблицу лиги, не изменяется. Любой совет / руководство с благодарностью получил:)

РЕДАКТИРОВАТЬ: Вот еще один аспект этой проблемы. Ниже вы увидите, что ввод только 8-го результата приводит к неправильной лиге. Мой код дублирует этот результат, добавляя его к Fixtures дважды - один раз правильно для 8-го прибора, но также неправильно к 3-му устройству, которое оказывается тем же самым устройством P2 v P3? (Содержимое массива указано в виде строки под таблицей лиги)

enter image description here

...