for-loop - 如何更正代码以使循环在数据匹配时停止
问题描述
我们每天都会使用 XML 将新条目拉入 Google 工作表(工作表 1)。我们正在使用下面的代码将这些条目提取到最终用户的单独 Google 表格中(表格 2)。然后最终用户可以编辑数据。我们正在尝试比较工作表 1 和工作表 2 中的 ID 号。每次运行代码时,工作表 1 中与工作表 2 中不匹配的 ID 号应添加到工作表 2。如果工作表 1 中的 ID 号表 2 中已存在,应跳过该 ID 号。它不是跳过比赛。相反,每次我们运行代码时它都会将所有内容添加到 Sheet 2,而 Sheet 2 现在包含重复项。
for(var i = 1; i < slateDT.length; i ++) {
var bannerid = slateDT[i][0];
var match = "No Match";
var j = 1;
while(j < gradingDT.length && match == "No Match") {
var matchID = gradingDT[j][1].trim();
if(bannerid.trim() != matchID){
j++;
} else {
match = "Match";
}
}
if(match == "No Match"){
additions.push(moveColumns(slateDT[i]));
}
}
if(additions.length > 0) {
gradingSS.getRange(gradingDT.length + 1, 2, additions.length, additions[0].length).setValues(additions);
gradingDT = getDataValues(gradingSS.getName());
var sortRng = gradingSS.getRange(2, 1, gradingDT.length, gradingDT[0].length);
sortRng.sort(3);
}
function moveColumns(studentRow) {
studentRow.splice(17, 3);
var v = checkDefined(studentRow.splice(20, 1));
studentRow.splice(10, 0, v.join());
v = checkDefined(studentRow.splice(18, 1));
studentRow.splice(13, 0, v.join());
v = checkDefined(studentRow.splice(20));
studentRow.splice(14, 0, v.join());
return studentRow;
}
解决方案
好的,我假设您奇怪的 moveColumns 函数可以满足您的要求,并且根据我上面的问题,列号不匹配。用这个替换你的 for 循环:
for (var i = 0; i < slateDT.length; i++) {
var oldID = slateDT[i][0].trim();
var matchID = 0;
for (var j = 1; j < gradingDT.length; j++) {
var newID = gradingDT[j][1].trim();
if (oldID == newID) {
matchID = j;
break; //ends the j loop when it meets the match
}
} //for [j] loop
if (matchID == 0) {
additions.push(moveColumns(slateDT[i]));
Logger.log("No match was found for " + i);
} else {
Logger.log("A match was found for " + i + " at " + j);
}
} //for [i] loop
这与您尝试对 while 循环执行的操作非常相似,但在某些情况下无法设法从不增加 J。
一旦您确定它正在工作,请注释掉两条记录器行以提高性能。
推荐阅读
- postgresql - 如何在 Postgres 中实现 PRAGMA EXCEPTION_INIT?
- java - Spring Boot & Postgres:关系“sub_comment”不存在
- java - 如何根据节点的数量对一组节点进行加权除法
- python - T-SNE 内存错误
- postgresql - Azure Database for PostgreSQL 基本计划和调试
- r - 将 R Shiny 部署到 IBM Cloud 服务器
- perl - 如何在 perl 中验证多维散列的值?
- javascript - 关于 JavaScript 中包含的 String 方法?
- neo4j - Neo4j APOC 验证触发器已存在
- angular - 如何以编程方式将引导弹出窗口添加到 Angular 中的 html 元素