javascript - 优化二维数组的迭代

标签 javascript optimization multidimensional-array google-apps-script google-sheets

我正在尝试优化一个 Google Apps 脚本,该脚本反向迭代电子表格中的行(从下到上)。该脚本会检查该行中的第一个单元格是否已过去 15 天,并检查第 12 列是否有字符串“Yes”,如果两个条件都为 true,则该行将从一张纸移动到另一张纸。

我遇到的问题是,我迭代所有 2500 行数据并期望变得更大,超出了分配的时间(6 分钟)。

我确信类似的问题已经在这里得到了多次解答,但鉴于我当前的编程技能水平,我无法应用我在这里找到的解决方案。任何帮助将不胜感激。

这是工作表的格式:

 1st column                 12th column
+-----------+-----/ /-----+-------------+
|  Date     |             | Refunded?   |
+-----------+-----/ /-----+-------------+
| 8/29/2017 |             |     YES     |
+-----------+-----/ /-----+-------------+
| 9/26/2017 |             |      NO     |
+-----------+-----/ /-----+-------------+

这是脚本:

function myFunction() {
  // get compare date (15 days from current date 
  var compareDate = new Date().getTime() - (15 * (1000 * 60 * 60 * 24));

  // get sheets in spreadsheet
  var target = SpreadsheetApp.getActiveSpreadsheet().getSheets()[1];
  var arr = [];

  // get 1st sheet data
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
  var values = sheet.getDataRange().getValues();
  var r = values.length;

  // logic
  while (r >= 1) {
    if (values[r] && values[r][0].getTime() < compareDate && values[r][12].toLowerCase() == "yes" ) {        
      arr.push(values[r])
      sheet.deleteRow(r + 1)
    }
    r--;
  }

  target.getRange(target.getLastRow() + 1, 1, arr.length, arr[0].length).setValues(arr.reverse())
}

如果我注释掉以下代码行“sheet.deleteRow(r + 1)”,脚本几乎立即完成,因此这似乎是减慢脚本执行速度的罪魁祸首。有没有更有效的解决方案来解决这个问题?

最佳答案

不要通过迭代删除一行,而是使用 deleteRows(rowPosition, howMany) 在脚本末尾一次性删除所有行。 。该行代码可能类似于以下代码:

sheet.deleteRows(2, values.length - 1);

关于javascript - 优化二维数组的迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46963814/

相关文章:

sql - 选择查询所需的性能

c++ - 修改具有 hashed_non_unique 键的 Boost Multi-Index Map 中的键范围

c++ - 在 C++ 中获取指向数组的指针的拷贝

javascript - 命名函数定义如何在 Javascript 的非全局范围内工作?

javascript - this.class 与 this.getAttribute ('class' )

javascript - 是否可以仅使用 css3 淡入新创建的元素?

javascript - 无需任何公共(public)属性即可垂直连接数组的更好方法

java - 当设备 GPS 关闭时获取移动设备的当前位置。移动网络应用程序

c++ - 如何进一步优化这个简单的算法?

sql - MySQL 查询成本