Перейти к основному содержимому

Метод `at` для относительного индексации

· 2 мин. чтения
Шу-ю Го ([@_shu](https://twitter.com/_shu))

Новый метод at в Array.prototype, различных TypedArray прототипах и String.prototype упрощает доступ к элементу ближе к концу коллекции.

Доступ к N-му элементу с конца коллекции — это распространённая операция. Однако обычные способы выполнить её многословны, как my_array[my_array.length - N], или могут быть непродуктивными, как my_array.slice(-N)[0]. Новый метод at делает эту операцию более удобной, интерпретируя отрицательные индексы как «с конца». Примеры выше могут быть выражены как my_array.at(-N).

Для унификации также поддерживаются положительные индексы, и они эквивалентны обычному доступу к свойствам.

Этот новый метод достаточно мал, чтобы его полная семантика могла быть понята через приведённую ниже совместимую реализацию полифила:

function at(n) {
// Преобразование аргумента в целое число
n = Math.trunc(n) || 0;
// Разрешение отрицательной индексации с конца
if (n < 0) n += this.length;
// Доступ за пределами границ возвращает undefined
if (n < 0 || n >= this.length) return undefined;
// В противном случае это обычный доступ к свойствам
return this[n];
}

Несколько слов о строках

Поскольку at в конечном счёте выполняет обычную индексацию, вызов at на строках возвращает кодовые единицы, как и обычная индексация. И как обычная индексация строк, кодовые единицы могут не подходить для задачи с Unicode строками! Пожалуйста, подумайте, подходит ли String.prototype.codePointAt() для вашего случая использования.

Поддержка метода at