Как получить последний элемент массива в JavaScript? (простые и надежные способы)
Лучший способ: свойство length
Самый надёжный, быстрый и широко используемый способ получить последний элемент массива — использовать свойство length. Индексы в JavaScript начинаются с 0, поэтому последний элемент всегда находится на позиции array.length - 1.
const fruits = ['apple', 'banana', 'orange', 'grape'];
const lastFruit = fruits[fruits.length - 1];
console.log(lastFruit); // 'grape'
// Динамическая работа: добавляем элемент
fruits.push('mango');
console.log(fruits[fruits.length - 1]); // 'mango'
Обработка пустого массива
Если массив пустой, array.length - 1 даст -1, а обращение по индексу -1 вернёт undefined. Это не ошибка, а корректное поведение. Вы можете проверить длину перед получением элемента:
function getLastElement(arr) {
if (arr.length === 0) {
return null; // или выбросить ошибку, или вернуть undefined
}
return arr[arr.length - 1];
}
console.log(getLastElement([])); // null
console.log(getLastElement([1])); // 1
Современный метод ES2022: Array.at()
Начиная с ES2022 (поддерживается всеми современными браузерами и Node.js 16.6+), появился метод at(), который принимает отрицательные индексы. -1 означает последний элемент, -2 — предпоследний и т.д. Это самый читаемый способ:
const fruits = ['apple', 'banana', 'orange', 'grape'];
const lastFruit = fruits.at(-1);
console.log(lastFruit); // 'grape'
// Пустой массив
console.log([].at(-1)); // undefined (без ошибок)
Чего НЕ стоит делать
array.pop()— удаляет последний элемент из массива. Если вам нужно просто прочитать значение, не используйте этот метод, иначе вы измените исходные данные.array.slice(-1)[0]— работает, но создаёт новый массив, что менее эффективно по памяти и производительности.array.reverse()[0]— мутирует исходный массив (переворачивает его). Категорически не рекомендуется.
Сравнение производительности
Метод через length — самый быстрый (O(1) — константное время). Метод at() — почти такой же быстрый и более читаемый. slice() — медленнее, так как создаёт копию части массива.
// Для 99% случаев используйте один из этих двух вариантов:
const last = arr[arr.length - 1]; // классика
const last = arr.at(-1); // современный стиль
Итоговая рекомендация
Если вы пишете код для современной среды (браузеры 2022+, Node.js 16+), используйте array.at(-1) — он интуитивно понятен и лаконичен. Если нужна максимальная совместимость со старыми средами (Internet Explorer, старые версии Node), используйте array[array.length - 1]. В обоих случаях не забывайте проверять, не пуст ли массив, если это критично для вашей логики.
Альтернативный подход: деструктуризация с rest-оператором
Если вы работаете с массивами, где нужно получить не только последний, но и все остальные элементы, можно использовать деструктуризацию с rest-оператором (...). Этот способ особенно полезен, когда вам нужно разделить массив на "все кроме последнего" и "последний":
const fruits = ['apple', 'banana', 'orange', 'grape'];
const [...allExceptLast, last] = fruits;
// Ошибка! В JavaScript так нельзя напрямую.
// Правильный способ:
const [last] = fruits.slice(-1);
console.log(last); // 'grape'
// Или с rest для первых элементов:
const allButLast = fruits.slice(0, -1);
const lastElement = fruits.slice(-1)[0];
console.log(allButLast); // ['apple', 'banana', 'orange']
console.log(lastElement); // 'grape'
Важно: В JavaScript нельзя использовать паттерн [...rest, last] в деструктуризации (в отличие от некоторых других языков). Поэтому для получения последнего элемента через деструктуризацию придётся комбинировать slice().
Этот подход удобен, когда вам одновременно нужны и "хвост" массива, и последний элемент. Но для простого получения последнего элемента он избыточен. Используйте его только если ваша задача требует разделения массива на части.
Ответов пока нет.
Войдите чтобы оставить ответ
Блоги