Как избежать многократного перехвата для неопределенных значений (используя if / else или каким-либо другим способом) при получении значений границ из электронной таблицы Google? - PullRequest
0 голосов
/ 11 декабря 2018

Я получаю значения границ из листа и создаю таблицу HTML в Gmail.Я новичок в Javascript (Google Script) и пытаюсь оптимизировать код.

Я использую расширенное свойство листов для получения значений границ для каждой ячейки.Если граница не существует, вместо того, чтобы возвращать «нет», значения не определены.Следовательно, используя try-catch, чтобы установить для границы значение none.

Я прочитал несколько блогов, в которых говорилось, что try-catch следует использовать минимально, и это замедляет код.Есть ли способ улучшить этот код, так как я использую try-catch для каждой границы (сверху, слева, справа и снизу) для каждой ячейки?

Ошибка, возвращаемая без try-catch: «Cannot read property»0.0 "от undefined '.

  //Creating an array of border values by assigning the range values 
var aBorderValues = JSON.parse(JSON.stringify(Sheets.Spreadsheets.get(spreadsheetID, {ranges: borderRange, fields: "sheets/data/rowData/values/userEnteredFormat/borders"})));
// Getting the top border style
    try
    {
      var topBorder =aBorderValues.sheets[0].data[0].rowData[i].values[j].userEnteredFormat.borders.top.style;  
    }
    catch (etop)
    {
      topBorder = "none";           
    }

1 Ответ

0 голосов
/ 11 декабря 2018

Вы можете написать что-то вроде get в lodash и указать путь к свойству, к которому вы хотите получить доступ, в виде массива строк и / или чисел:

function get (object, path, defaultValue) {
  return object === undefined //object at current path is undefined
    ? defaultValue //return default value
    : path.length === 0 //no more items in path
      ? object //return value at completed path (path.length === 0)
      : object[path[0]] === undefined //go one level deeper
        ? defaultValue //there is nothing one level deeper, return default
        : get(object[path[0]], path.slice(1), defaultValue); //recursively call itself
}
const test = [{ name: 'hi' }];
console.log(get(test, [0, 'name']));
console.log(get(test, [1, 'name'], 'default value'));
console.log(
  get(undefined, [1, 'name'], 'other default value'),
);
//index of array does not have to be a number:
console.log(get(test, ['0', 'name']));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...