Как вернуть false вместо «TypeError: Cannot read property»? - PullRequest
0 голосов
/ 30 октября 2018

У меня есть код, который находит значение в столбце 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" из неопределенного.

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

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

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

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Проблема:

Пока существует 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 голосов
/ 30 октября 2018
  if (values[row][0] === parsedJson.myValue) {

должно быть

  if (values[row] && values[row][0] === parsedJson.myValue) {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...