首页 > 解决方案 > 试图加快我的脚本比较 2 个数组(不是 for 循环)

问题描述

我正在尝试比较我的工作表中的两列 1 列是曾经与我们进行购买的所有电子邮件地址的列表,超过 50000,另一列是与我们进行购买的电子邮件列表我们在过去的一个月里。我试图通过比较主列表中的新电子邮件地址来计算新的电子邮件地址。

我有一些东西可以处理一个较小的列表,但是当我索引我的 50000+ 列表时它会一直超时。有什么办法可以加快我的脚本速度吗?

function compareList(){
var s= SpreadsheetApp.openById('My sheet ID');
var ss = s.getSheetByName("Compare");
var oldsubs = ss.getRange(5,1,ss.getLastRow(),1).getValues();
var newsubs = ss.getRange(5,2,ss.getLastRow(),1).getValues();


var array = newsubs.filter(function(e) {return oldsubs.filter(function(f) {return f[0] == e[0]}).length == 0});
Logger.log(array.length)
  

欢迎任何帮助。

标签: javascriptgoogle-apps-scriptgoogle-sheets

解决方案


试试这个:

function newnotinold() {
  var s = SpreadsheetApp.getActive()
  var ss = s.getSheetByName("Sheet1");
  var o = ss.getRange(2, 1, ss.getLastRow(), 1).getValues().flat();
  var n = ss.getRange(2, 2, ss.getLastRow(), 1).getValues().flat();
  let newnotinold = n.filter(x => !~o.indexOf(x));
  Logger.log(newnotinold);
}

推荐阅读