javascript - 在推送之前检查数组中是否存在现有数组

标签 javascript arrays google-apps-script

在尝试推送到数组同时防止重复时,我丢失了一些内容。

我一直在研究将员工的每次出现推送到新员工数组的代码,但我无法弄清楚如何只推送唯一的列表。

我的最终数组是一个二维数组,因此可以将其 setValues() 返回到 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 block 中添加一行来更新索引

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

这样,当您的员工数组包含您需要的数组时,索引会为您跟踪重复项。

关于javascript - 在推送之前检查数组中是否存在现有数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46415259/

相关文章:

javascript - 这场比赛为何失败?

c - 将用户输入的大数字存储到整数数组中

arrays - 如何获取带空格的数组的最大值和最小值?

c# - 有没有更有效的方法来禁用多个脚本,同时在 Unity 中的单个游戏对象上保持一些事件?

javascript - BIGQuery - 函数 ARRAY_TO_STRING 没有匹配的签名

javascript - 具有多个样式表和 js 链接的 Google Apps 脚本

javascript - 更高效的 'remove duplicates' 函数

javascript - 平均堆栈 : How to create routes for nested relationships?

javascript - table.columns 不是 datatable.js 中的函数

javascript - Vue.js 的引导表/分页中的数据问题