AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 79376447
Accepted
user3225844
user3225844
Asked: 2025-01-22 11:13:11 +0800 CST2025-01-22 11:13:11 +0800 CST 2025-01-22 11:13:11 +0800 CST

如何修复 AppScript 数组值比较错误(值的长度不同)

  • 772

我有一个 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 个数字,则得分正确。

google-apps-script
  • 1 1 个回答
  • 38 Views

1 个回答

  • Voted
  1. Best Answer
    doubleunary
    2025-01-22T17:11:06+08:002025-01-22T17:11:06+08:00

    该逻辑始终将 +1 应用于较短长度的分数(2 个数字对 3 个数字),无论是主场还是客场。

    这些值可能不是数字,而是看起来像数字的文本字符串。文本字符串按字典顺序比较,因此"10"< "2"。

    为了使其正常工作,请将列格式化为格式 > 数字 > 自动而不是格式 > 数字 > 纯文本,或者使用Number(),如下所示:

          for (let k = 0; k <= 15; k++) { 
            const homeStat = Number(statsData[(19 * i) + k]); 
            const awayStat = Number(statsData[(19 * j) + k]);
    

    参见Number()。

    • 0

相关问题

  • 连接到引用变量?

  • jQuery 和冒泡加载页面导入内容为空 Google Sheet Importxml - 什么 google apps 脚本解决方法?

  • 如何使用 Gmail 插件中的卡服务实现文件上传功能

  • 脚本未按预期将单元格值复制到 K5

  • 谷歌应用程序脚本水平复选框,如单选按钮(选中/取消选中)

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    重新格式化数字,在固定位置插入分隔符

    • 6 个回答
  • Marko Smith

    为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会?

    • 2 个回答
  • Marko Smith

    VScode 自动卸载扩展的问题(Material 主题)

    • 2 个回答
  • Marko Smith

    Vue 3:创建时出错“预期标识符但发现‘导入’”[重复]

    • 1 个回答
  • Marko Smith

    具有指定基础类型但没有枚举器的“枚举类”的用途是什么?

    • 1 个回答
  • Marko Smith

    如何修复未手动导入的模块的 MODULE_NOT_FOUND 错误?

    • 6 个回答
  • Marko Smith

    `(表达式,左值) = 右值` 在 C 或 C++ 中是有效的赋值吗?为什么有些编译器会接受/拒绝它?

    • 3 个回答
  • Marko Smith

    在 C++ 中,一个不执行任何操作的空程序需要 204KB 的堆,但在 C 中则不需要

    • 1 个回答
  • Marko Smith

    PowerBI 目前与 BigQuery 不兼容:Simba 驱动程序与 Windows 更新有关

    • 2 个回答
  • Marko Smith

    AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String”

    • 1 个回答
  • Martin Hope
    Fantastic Mr Fox msvc std::vector 实现中仅不接受可复制类型 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant 使用 chrono 查找下一个工作日 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor 构造函数的成员初始化程序可以包含另一个成员的初始化吗? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský 为什么 C++20 概念会导致循环约束错误,而老式的 SFINAE 不会? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul C++20 是否进行了更改,允许从已知绑定数组“type(&)[N]”转换为未知绑定数组“type(&)[]”? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann 为什么 {2,3,10} 和 {x,3,10} (x=2) 的顺序不同? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller 在 5.2 版中,bash 条件语句中的 [[ .. ]] 中的分号现在是可选的吗? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench 为什么双破折号 (--) 会导致此 MariaDB 子句评估为 true? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng 为什么 `dict(id=1, **{'id': 2})` 有时会引发 `KeyError: 'id'` 而不是 TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob:MobileAds.initialize() - 对于某些设备,“java.lang.Integer 无法转换为 java.lang.String” 2024-03-20 03:12:31 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve