簡體   English   中英

Google Apps 編寫更好的方法來獲取唯一值

[英]Google Apps Script Better Way to Get Unique Values

我的工作代碼從 Google 電子表格中的兩個不相鄰列中獲取數據,在第一列中查找唯一值,如果唯一,則創建一個新數組,其中包含第一列中的唯一值和第二列中的相應值。 問題是,我使用的數據已經有點長(413 行),並且隨着時間的推移只會變得更長。 代碼運行大約需要 1-2 分鍾。 我一直在尋找一種更短的方法來執行此操作,並且遇到了 filter() 和 map() 數組函數,它們據說比 for 循環更快,但我無法正確實現它們。 任何有關這些或更快方法的幫助將不勝感激。 我現在擁有的代碼如下。

function getkhanassignments(rows) {

  var assignmentsraw = [];
  var temparray = [];
  var previousassignment = datasheet.getRange(50,1).getValue();
  for(i=0, j=0;i<rows-1;i++) {
    if(datasheet.getRange(50+i,1).getValue() != previousassignment) {   
      previousassignment = datasheet.getRange(50+i,1).getValue();
      assignmentsraw[j] = new Array(2);
      assignmentsraw[j][0] = datasheet.getRange(50+i,1).getValue();
      assignmentsraw[j][1] = datasheet.getRange(50+i,8).getValue();
      j++;
    }
  }
  Logger.log(assignmentsraw);
  return assignmentsraw;
}

我在其他地方找到的答案只涉及從一維數組中獲取唯一值,而我需要來自一維數組的唯一值與來自另一個一維數組的相應值相結合。 output 應該是一個二維數組,第一列的唯一值和第二列的對應值。

解決方案:

在 Google Apps 腳本中循環遍歷范圍的最佳做法是將范圍值轉儲到二維數組中,循環遍歷該數組,然后將 output 數組返回給 Google 表格。

這樣,就不會在循環內調用 Sheets API。

示例代碼:

function getkhanassignments(rows) {

  var assignmentsraw = [];

  var table1 = datasheet.getRange(50,1,rows).getValues();
  var table2 = datasheet.getRange(50,8,rows).getValues();

  var previousassignment = table1[0][0];
  assignmentsraw.push([table1[0][0],table2[0][0]]);
  for(i=0; i<rows; i++) {
    if (table1[i][0] != previousassignment) {
      assignmentsraw.push([table1[i][0],table2[i][0]]);
      previousassignment = table1[i][0];
    }
  }
  Logger.log(assignmentsraw);
  return assignmentsraw;
}

參考:

Class 范圍

推()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM