簡體   English   中英

循環內的 IF 語句未執行

[英]IF statement inside a loop is not executing

在我的一生中,我無法弄清楚為什么這個 if 語句永遠不會執行。 下面的代碼是在我添加了一堆用於調試的記錄器之后,但通常它只會讀取if(answerArray[z] == answerArray[z-1]) 似乎它應該在第三遍時觸發,但沒有。 有誰知道發生了什么? 我也嘗試過=== ,但仍然沒有骰子。

/////////////////////////////////////////////////////////////////////////
// Get answer choices
/////////////////////////////////////////////////////////////////////////
  var lastRow = sheet.getLastRow();
  var rawArray= sheet.getRange('D6:D'+lastRow).getValues();  
  var answerArray = rawArray.filter(function(n){return n != ''});   //remove blanks
  answerArray.sort();

/////////////////////////////////////////////////////////////////////////
// Remove Duplicate Answers
/////////////////////////////////////////////////////////////////////////
  var arrayContents = "";
  for (var z = 0;z<answerArray.length;z=z+1) {arrayContents = arrayContents + answerArray[z] + ", ";}

  Logger.log("RemoveDupes Started");
  Logger.log("Array Contents: " + arrayContents);
  Logger.log("answerArray[0] = "+answerArray[0]);
  for(var z = 1; z< answerArray.length; z=z+1){
     // Logger.log("answerArray["+z+"] = "+answerArray[z]);
      var current = answerArray[z];
      var previous = answerArray[z-1];
      Logger.log("Current = " + current+"; Previous = " + previous);
      if(current == previous) 
      {
        Logger.log("Duplicate Found");
          answerArray.splice(z,1);
          //answerArray.splice(z,1); //delete duplicate
          z=z-1;                  //reduce z to account for shortened array
      }
  }
  Logger.log("RemoveDupes Ended");

這是日志:

11:40:53 AM Notice  Execution started
11:41:01 AM Info    RemoveDupes Started
11:41:01 AM Info    Array Contents: A, B, C, C, D, 
11:41:01 AM Info    answerArray[0] = A
11:41:01 AM Info    Current = B; Previous = A
11:41:01 AM Info    Current = C; Previous = B
11:41:01 AM Info    Current = C; Previous = C
11:41:01 AM Info    Current = D; Previous = C
11:41:01 AM Info    RemoveDupes Ended

解決方案感謝大家的參與。我能夠通過將數組轉換為字符串來解決它。 我將頂部更改為以下內容,並且可以正常工作。

/////////////////////////////////////////////////////////////////////////
// Get answer choices
/////////////////////////////////////////////////////////////////////////
  var lastRow = sheet.getLastRow();
  var rawArray = [""];
  var directInputArray = sheet.getRange('D6:D'+lastRow).getValues();  
  for(var z = 0; z< directInputArray.length; z=z+1){
     rawArray[z] = String(directInputArray[z]);  //cast all values as strings to remove meta-data
  }

  var answerArray = rawArray.filter(function(n){return n != ''});   //remove blanks
  answerArray.sort();

/////////////////////////////////////////////////////////////////////////
// Remove Duplicate Answers
/////////////////////////////////////////////////////////////////////////
  for(var z = 1; z< answerArray.length; z=z+1){
      if(answerArray[z] == answerArray[z-1]) {
          answerArray.splice(z,1);
          z=z-1;                  //reduce z to account for shortened array
      }
  }

試試這個代碼...

/////////////////////////////////////////////////////////////////////////
// Get answer choices
/////////////////////////////////////////////////////////////////////////
  var lastRow = sheet.getLastRow();
  var answerArray = sheet.getRange('D6:D'+lastRow).getValues().filter(String).sort();   //remove blanks

/////////////////////////////////////////////////////////////////////////
// Remove Duplicate Answers
/////////////////////////////////////////////////////////////////////////
  let unique = answerArray.filter((item, i, ar) => ar.indexOf(item) === i);
  Logger.log(unique);

從這里... 如何獲取數組中的唯一值

該解決方案已發布在該問題上,因此我將在此處將其添加為社區 wiki,以便更多人可以從中受益:

解決方案感謝大家的參與。我能夠通過將數組轉換為字符串來解決它。 我將頂部更改為以下內容,並且可以正常工作。

/////////////////////////////////////////////////////////////////////////
// Get answer choices
/////////////////////////////////////////////////////////////////////////
  var lastRow = sheet.getLastRow();
  var rawArray = [""];
  var directInputArray = sheet.getRange('D6:D'+lastRow).getValues();  
  for(var z = 0; z< directInputArray.length; z=z+1){
     rawArray[z] = String(directInputArray[z]);  //cast all values as strings to remove meta-data
  }

  var answerArray = rawArray.filter(function(n){return n != ''});   //remove blanks
  answerArray.sort();

/////////////////////////////////////////////////////////////////////////
// Remove Duplicate Answers
/////////////////////////////////////////////////////////////////////////
  for(var z = 1; z< answerArray.length; z=z+1){
      if(answerArray[z] == answerArray[z-1]) {
          answerArray.splice(z,1);
          z=z-1;                  //reduce z to account for shortened array
      }
  }

暫無
暫無

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

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