function first<T>(array: T[]): T | undefined;
function first<T>(array: T[], n: number): T[];
function first<T>(array: T[], n?: number): T | T[] | undefined;
С одним аргументом first возвращает один элемент, а для пустого массива — undefined, а не исключение: именно это избавляет каждое место вызова от собственной проверки. С указанием количества возвращается новый массив, поэтому две формы не нужно различать во время выполнения.
n ограничивается так же, как в Array#slice: отрицательное число даёт пустой массив, число больше длины — весь массив. Исходный массив не изменяется.
Параметры
Параметр
Тип
Описание
array
T[]
Массив, из которого читаем. Не изменяется.
n(необязательный)
number
Сколько элементов взять. Целое число; опустите, чтобы взять один элемент.
Возвращает
T | T[] | undefined — первый элемент или новый массив не более чем из n элементов.
/**
* Splits a sheet into its header row and its data rows, and says so when the
* sheet turns out to be empty.
*/
export function readTable(sheet: GoogleAppsScript.Spreadsheet.Sheet): {
header: string[];
rows: string[][];
} {
const values = sheet.getDataRange().getValues() as string[][];
const header = first(values);
if (!header) {
throw new Error("The sheet is empty.");
}
return { header, rows: values.slice(1) };
}
function readTable(sheet) {
const values = sheet.getDataRange().getValues();
const header = first(values);
if (!header) {
throw new Error("The sheet is empty.");
}
return { header: header, rows: values.slice(1) };
}
Ограничение количества
first([1, 2], 10); // => [1, 2] — never more than the array holds
first([1, 2], -1); // => []
first([1, 2], 1.5); // throws TypeError: Input 'n' must be an integer.