微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Google Apps Script 获得独特价值的更好方式

如何解决Google Apps Script 获得独特价值的更好方式

我有工作代码从 Google 电子表格中的两个不相邻列中获取数据,在第一列中查找唯一值,如果唯一,则创建一个新数组,其中包含第一列中的唯一值和对应的值第二列。问题是,我使用的数据已经有点长(413 行),而且随着时间的推移只会变得更长。代码运行大约需要 1-2 分钟。我一直在寻找一种更短的方法来做到这一点,我遇到了 filter() 和 map() 数组函数,它们据说比 for 循环更快,但我无法正确实现它们。对这些或更快的方法的任何帮助将不胜感激。我现在拥有的代码如下。

function getkhanassignments(rows) {

  var assignmentsraw = [];
  var temparray = [];
  var prevIoUsassignment = datasheet.getRange(50,1).getValue();
  for(i=0,j=0;i<rows-1;i++) {
    if(datasheet.getRange(50+i,1).getValue() != prevIoUsassignment) {   
      prevIoUsassignment = datasheet.getRange(50+i,1).getValue();
      assignmentsraw[j] = new Array(2);
      assignmentsraw[j][0] = datasheet.getRange(50+i,1).getValue();
      assignmentsraw[j][1] = datasheet.getRange(50+i,8).getValue();
      j++;
    }
  }
  Logger.log(assignmentsraw);
  return assignmentsraw;
}

我在其他地方找到的答案只涉及从一维数组中获取唯一值,而我需要一维中的唯一值与另一个一维数组中的相应值相结合。输出应该是一个二维数组,其中第一列的值是唯一的,第二列的值是对应的。

解决方法

解决方案:

在 Google Apps 脚本中循环遍历范围的最佳做法是将范围值转储到一个二维数组中,循环遍历该数组,然后将输出数组返回到 Google 表格。

这样,就不会在循环内调用 Sheets API。

示例代码:

function getkhanassignments(rows) {

  var assignmentsraw = [];

  var table1 = datasheet.getRange(50,1,rows).getValues();
  var table2 = datasheet.getRange(50,8,rows).getValues();

  var previousassignment = table1[0][0];
  assignmentsraw.push([table1[0][0],table2[0][0]]);
  for(i=0; i<rows; i++) {
    if (table1[i][0] != previousassignment) {
      assignmentsraw.push([table1[i][0],table2[i][0]]);
      previousassignment = table1[i][0];
    }
  }
  Logger.log(assignmentsraw);
  return assignmentsraw;
}

参考:

Class Range

push()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。