Как исправить код так, чтобы цикл останавливался при совпадении данных - PullRequest
0 голосов
/ 07 мая 2019

У нас ежедневно появляются новые записи в листе Google с использованием XML (лист 1).Мы используем приведенный ниже код для переноса этих записей в отдельный лист Google для конечных пользователей (лист 2).Конечные пользователи могут затем редактировать данные.Мы пытаемся сравнить идентификационные номера в листе 1 и листе 2. Каждый раз, когда мы запускаем код, идентификационные номера из листа 1, которые не совпадают в листе 2, должны добавляться к листу 2. Если идентификационный номер в листе 1уже существует на листе 2, этот идентификационный номер следует пропустить.Это не пропуск матчей.Вместо этого он добавляет все в лист 2 каждый раз, когда мы запускаем код, а лист 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;
}

1 Ответ

0 голосов
/ 07 мая 2019

Хорошо, я предполагаю, что ваша странная функция 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 при определенных обстоятельствах.

Как только вы убедитесь, что это работает, закомментируйте две строки логгера для производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...