【问题标题】:For-loops and if-statements on cross referenced sheets交叉引用表上的 For 循环和 if 语句
【发布时间】:2019-04-06 14:52:42
【问题描述】:

我有 5 张表格 - 1 张主表格和 4 张数据表格。 4 张表包含一列 W 和 L,主表有 8 个单元格来跟踪这些 - 每个 W 和 L 的 # 个单元格。我正在尝试使用以下脚本执行此操作,然后在主工作表的各个单元格中调用方法。

function totalWins(data) {
  var win = 0;
  for(var i = 0; i < data.length; i = + 1) {
    if(data[i][0] = "W") {
      win = win + 1;
    }
  }
  return win;
}

function totalLosses(data) {
  var loss = 0;
  for(var i = 0; i < data.length; i = + 1) {
    if(data[i][0] = "L") {
      loss = loss + 1;
    }
  }
  return loss;
}

我收到Internal error executing the custom function. 错误,这意味着代码需要超过 30 秒才能通过四张纸之一中的列 (n = 100)。我真的不明白为什么会这样。任何帮助表示赞赏!

【问题讨论】:

    标签: javascript google-apps-script google-sheets


    【解决方案1】:

    您将+ 放在代码中的错误位置

    for (var i = 0; i < data.length; i = + 1) {
    //                                   ^
                                         |____ This makes acts as `+` sign
    

    所以在这种情况下,你实际上并没有增加你的索引,所以你循环继续运行

    改成这个

    for (var i = 0; i < data.length; i += 1) {
    //                                 ^
                                       |_____  This acts as `addition`
    

    或者干脆使用i++

    【讨论】:

    • 我将这个和win = win + 1; 更改为win++;。现在方法运行,但都返回 0。在我循环的范围内有很多空单元格 - 这可能是问题吗?或者您有什么其他建议?
    • @simonbrage 为什么要将win = win + 1 更改为win += 1 两者都是一样的只是
    【解决方案2】:

    您需要增加i。如果没有将+1 分配给i,则循环只取前两个值并使用i === 1 永远循环。

    for (var i = 0; i < data.length; i = i + 1) {
    //                                   ^
    

    或者更短一点

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

    正如 TheWizEd 在 cmets 中提到的,如果 if 语句,您应该分配一个值,您应该在其中比较该值

    if (data[i][0] === "W") {
    //             ^^         strict comparison
    

    【讨论】:

    • 好的,因此通过此更改,方法实际运行,但它们现在都返回 100。我正在循环的范围内有很多空单元格 - 这可能是问题吗?或者你有什么其他建议吗? :-)
    • 一百个项目几乎没有。不知道更多,很难说。
    • 不应该 if(data[i][0] = "W") 是 if(data[i][0] == "W")? “L”也一样。
    • 不会改变任何看起来@TheWizEd
    • 使用 Logger.log(data) 检查“数据”;或 Logger.log(data.length);
    【解决方案3】:

    通过将计数器 win = win + 1loss = loss + 1 更改为 win +=1loss +=1 来修复它。也有上述增量。

    【讨论】:

    • win = win + 1 更改为 win += 1 相同的丢失不会有任何区别
    • @CodeManiac 好吧,它以前不起作用,现在起作用了。如果你想知道为什么,我不是那个 xD
    猜你喜欢
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多