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