Javascript 推送前检查阵列中的现有阵列

Javascript 推送前检查阵列中的现有阵列,javascript,arrays,google-apps-script,Javascript,Arrays,Google Apps Script,我在尝试推送到阵列同时防止重复时遗漏了一些内容 我一直在寻找将员工的每一次出现都推送到新员工数组的代码,但我不知道如何只推一个唯一的列表 我的最后一个数组是2d数组,因此可以将值设置回Google工作表中的一列 function queryEmployees(){ var sh = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0]; var lRow = sh.getLastRow(); var data = sh.getRan

我在尝试推送到阵列同时防止重复时遗漏了一些内容

我一直在寻找将员工的每一次出现都推送到新员工数组的代码,但我不知道如何只推一个唯一的列表

我的最后一个数组是2d数组,因此可以将值设置回Google工作表中的一列

function queryEmployees(){
  var sh = SpreadsheetApp.getActiveSpreadsheet().getSheets()[0];
  var lRow = sh.getLastRow();
  var data = sh.getRange(1,1,lRow,2).getValues();
  var employees = [];
  for(i=0;i<data.length;i++){
     if(data[i][0]==='Team member evaluated'){
       if(employees.indexOf([data[i][1]])===-1){
         employees.push([data[i][1]]);
       }
     }
  }
  Logger.log(employees);
  Logger.log(employees.length);
  SpreadsheetApp.getActiveSpreadsheet().getSheets()[1]
  .getRange(1,1,employees.length,1).setValues(employees);
    }

如果不重写函数或编写自己的函数,IndexOf无法处理数组中的对象。不过,它可以很好地处理字符串。因此,一个简单的修复方法是创建一个并行字符串数组,它允许我们保持代码几乎完好无损。因此,加上

var employeesIndex=[];
在你

var employees=[]
将内部if子句中的条件更改为

(employeesIndex.indexOf(data[i][1])===-1)
在该if块中添加一行以更新索引

employeesIndex.push(data[i][1]);

这样,索引将为您跟踪重复项,而您的employees数组包含您需要的数组。

Cheat!使用.Avoid==进行字符串比较,也可以使用==。Use.equals insteadJavascript没有.equals方法?==就是这样。谢谢你的更正。我最近一直在Java工作,但忘记了。我认为==在-1上也可能有帮助,至少值得一试。对不起,我给了你一条红鲱鱼。问题是indexOf在查找数组(而不是字符串)时会变得暴躁。我认为是相关的。非常有用,好主意@Jeremy