我有一个 google sheet appscript 宏,用于比较某个联赛中一组球队的每周得分。它通过比较一组类别的得分来检查哪支球队每周会击败对方。有一些逻辑可以设置某些类别的得分是高还是低。该宏在几乎所有情况下都能正确地比较得分,但我最终发现了一个无法解决的错误。
// Get all relevant data from the stat sheet in one go
const statsRange = statSheet.getRange('C8:C234').offset(0, weeks);
const statsData = statsRange.getValues();
// Iterate through teams (assuming 12 teams)
for (let i = 0; i <= 11; i++) {
for (let j = 0; j <= 11; j++) {
if (i===11&&j===11) {break}
if (j===i) {j=j+1;}
let score = 0;
// Iterate through stats for each team pair, comparing and calculating score.
Scores are across 19 rows per team in the data set. There are 15 relevant rows.
for (let k = 0; k <= 15; k++) {
var homeStat = statsData[(19 * i) + k];
var awayStat = statsData[(19 * j) + k];
// Skip some stats and handle some differently
if (k === 0 || k === 1 || k === 3 || k === 4) {continue}
else if (k === 13||k === 14) {
score += (homeStat < awayStat) ? 1 : (homeStat > awayStat) ? -1 : 0;
} else {
score += (homeStat > awayStat) ? 1 : (homeStat < awayStat) ? -1 : 0;
}
console.log(i, j, k, homeStat, awayStat, score)
}
输入数据集示例
细胞 | 价值 |
---|---|
C198 | 180 |
C199 | 409 |
C200 | 0.44 |
C201 | 114 |
C202 | 148 |
C203 | 0.77 |
C204 | 68 |
C205 | 542 |
C206 | 43 |
C207 | 174 |
C208 | 107 |
C209 | 二十八 |
C210 | 14 |
C211 | 55 |
C212 | 0 |
C213 | 0 |
C214 | 7 |
C215 | |
C216 | |
C217 | 130 |
C218 | 273 |
C219 | 0.476 |
C220 | 65 |
C221 | 82 |
C222 | 0.793 |
C223 | 三十五 |
C224 | 360 |
C225 | 四十二 |
C226 | 142 |
C227 | 87 |
C228 | 31 |
C229 | 二十五 |
C230 | 52 |
C231 | 0 |
C232 | 1 |
C233 | 7 |
出于某种原因,如果 HomeStat 和 AwayState 的数量级不同,则此比较会产生相反的结果。示例日志/输出:i 和 j 是工作表中的团队。k 是统计类别。主场和客场统计数据是每个团队针对该类别的输入。分数应根据逻辑增加或减少。k = 10 是错误。当主场得分小于客场得分时,它会增加。
|time|log|i|j|k|home stat|away stat|score|
6:59:04 PM Info 11 10 2 [ 0.476 ] [ 0.44 ] 1
6:59:04 PM Info 11 10 5 [ 0.793 ] [ 0.77 ] 2
6:59:04 PM Info 11 10 6 [ 35 ] [ 68 ] 1
6:59:04 PM Info 11 10 7 [ 360 ] [ 542 ] 0
6:59:04 PM Info 11 10 8 [ 42 ] [ 43 ] -1
6:59:04 PM Info 11 10 9 [ 142 ] [ 174 ] -2
6:59:04 PM Info **11 10 10 [ 87 ] [ 107 ] -1**
6:59:04 PM Info 11 10 11 [ 31 ] [ 28 ] 0
6:59:04 PM Info 11 10 12 [ 25 ] [ 14 ] 1
6:59:04 PM Info 11 10 13 [ 52 ] [ 55 ] 2
6:59:04 PM Info 11 10 14 [ 0 ] [ 0 ] 2
6:59:04 PM Info 11 10 15 [ 1 ] [ 0 ] 3
逻辑始终将 +1 应用于长度较短的分数(2 比 3 个数字),无论主场还是客场。如果两个分数都是 2 或 3 个数字,则得分正确。