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

カンニング! [Set](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set)を使用してください。 – Will

+0

文字列の比較には===を避け、==も使用します。代わりに.equals()を使用してください。 –

+0

Javascriptに.equals()メソッドがありませんか? ==行く方法です。 –

答えて

1

IndexOfは、関数の書き換えや独自の書き込みを行わずに配列内のオブジェクトでは機能しません。しかし、文字列でうまく動作します。したがって、単純な修正は、文字列の並列配列を作成することで、コードをほとんど損なわないようにすることができます。ブロックは、インデックスを更新するために行を追加するとこのように、「もし」句

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

にし、その中にあなたの内にあなたの

var employees=[] 

変更した後、条件を

var employeesIndex=[]; 

を追加

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

こうしてインデックスt従業員の配列に必要な配列が含まれている間に、ラックが複製されます。

+0

非常に役に立ち、素晴らしいアイデア@ジェレミー – CRB

関連する問題