在我的一生中,我无法弄清楚为什么这个 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
}
}
答案 0 :(得分:0)
试试这个代码...
/////////////////////////////////////////////////////////////////////////
// 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);
答案 1 :(得分:0)
解决方案已发布在问题上,因此我将其添加为社区维基,以便更多人可以从中受益:
<块引用>解决方案 感谢大家的参与。我能够通过将数组转换为字符串来解决它。我将顶部部分更改为以下部分,并且可以正常工作。
/////////////////////////////////////////////////////////////////////////
// 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
}
}