2017-09-25 64 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