2017-09-25 65 views
0

我在尝试推送到阵列时错过了某些内容,同时阻止了重复项。在推送之前检查阵列中现有的阵列

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

我的最终数组是一个2d数组,因此可以将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); 
    } 
+0

作弊!使用[设置](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set)。 – Will

+0

避免===字符串比较和==。使用.equals()代替 –

+0

Javascript没有.equals()方法? ==是要走的路。 –

回答

1

IndexOf在数组中没有重写函数或编写自己的函数时不能用于数组中的对象。尽管如此,它在字符串中工作正常。所以一个简单的解决方法是创建一个并行的字符串数组,这使我们能够保持您的代码几乎完好无损。因此,添加

var employeesIndex=[]; 

var employees=[] 

变更后的条件对你内心的“如果”条款

(employeesIndex.indexOf(data[i][1])===-1) 

和内如果块添加一行更新索引

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

那样指数t机架重复为你,而你的员工数组包含你需要的数组。

+0

非常有帮助,好主意@Jeremy – CRB