Как вернуть false вместо «TypeError: Cannot read property»?

1

У меня есть код, который находит значение в столбце A и возвращает другие значения столбца в этой строке:

function getCurrentRow(e) {
  var parsedJson = JSON.parse(e.postData.contents);
  var ss = SpreadsheetApp.openById("...");
  var sheet = ss.getSheetByName("List");

  var column = sheet.getRange("A:A");
  var values = column.getValues();
  var row = 0;

  while ( values[row] && values[row][0] !== parsedJson.myValue ) {
    row++;
  }

  if (values[row][0] === parsedJson.myValue) {
    var record = {};

    record['top'] = sheet.getRange((row+1), 2).getValue();
    record['bottom'] = sheet.getRange((row+1), 3).getValue();

    return ContentService.createTextOutput(JSON.stringify(record)).setMimeType(ContentService.MimeType.JSON);
  }
}

Он работает, но когда он не может найти myValue, он возвращает

TypeError: Невозможно прочитать свойство "0" из undefined.

в этой строке:

if (values[row][0] === parsedJson.myValue) {

Как я могу исправить это и вернуть "Не могу найти myValue" вместо этого?

  • 0
    Что такое полное сообщение об ошибке?
  • 0
    Ошибка типа: невозможно прочитать свойство & quot; 0 & quot; из неопределенного.
Показать ещё 3 комментария
Теги:
google-apps-script

2 ответа

1
Лучший ответ
  if (values[row][0] === parsedJson.myValue) {

должно быть

  if (values[row] && values[row][0] === parsedJson.myValue) {
  • 0
    Большое спасибо! Оно работает.
0

Выпуск:

Пока существуют values[row], вы добавляете 1 к row с row++. Скажем, Есть 5 строк (индекс: от 0 до 4) в A:A и values[row][0] !== parsedJson.myValue во всех 5 строках. В последней строке (фактическая строка 5, индекс: 4), row++ добавляет 1, а теперь row 5 (индекс: 5). Но values[5] не существуют и не определены, что не имеет свойства [0].

Решение:

Добавьте еще одно условие в while условия:

var lastRowIndex = values.length;
while ( values[row] && 
values[row][0] !== parsedJson.myValue 
&& row < lastRowIndex ) {
 row++;
}
  • 0
    Большое спасибо! Я не думал об этом. Но вы допустили небольшую ошибку: «добавляет 1, а строка теперь 6 (индекс: 5)».
  • 0
    @Neret На самом деле переменная row является индексом. Фактическая строка равна 6, но row / индекс равна 5. Лучше было бы выбрать row именем переменной, чтобы избежать путаницы, поскольку она обозначает только индекс массива, а не фактический номер строки.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню