Получить последний элемент массива
У меня есть следующий код на JavaScript:
var linkElement = document.getElementById("BackButton");
var loc_array = document.location.href.split('/');
var newT = document.createTextNode(unescape(capWords(loc_array[loc_array.length-2])));
linkElement.appendChild(newT);
На данный момент код берет предпоследний элемент массива, полученного из URL. Однако я хочу добавить проверку: если последний элемент массива равен index.html
, то вместо этого нужно взять третий с конца элемент. Как правильно реализовать эту логику?
5 ответ(ов)
Не уверен, есть ли у этого подхода недостатки, но он выглядит довольно лаконично:
arr.slice(-1)[0]
или
arr.slice(-1).pop()
Оба варианта вернут undefined
, если массив пуст.
Если говорить о различиях, то в первом случае метод slice(-1)
создает новый массив, содержащий последний элемент, и вы сразу обращаетесь к первому элементу этого нового массива. Во втором случае, метод pop()
удаляет последний элемент из массива и возвращает его, но если массив пуст, то подразумевается, что этот метод просто вернет undefined
. В общем, оба варианта одинаково безопасны для пустых массивов, но стоит учитывать, что pop()
изменяет оригинальный массив.
Короткая версия того, что уже упоминал @chaiguy:
Array.prototype.last = function() {
return this[this.length - 1];
}
Чтение по индексу -1 уже возвращает undefined
.
ИЗМЕНЕНИЕ:
В последнее время предпочтительнее использовать модули и избегать изменения прототипа или использования глобальной области видимости.
export function last(array) {
return array[array.length - 1];
}
В вашем вопросе рассматриваются два способа получить последний элемент массива в JavaScript:
Использование свойства
length
:var last = arr[arr.length - 1];
Использование метода
slice
:var last = arr.slice(-1)[0];
Первый способ, который обращается к последнему элементу массива через length
, как правило, работает быстрее, поскольку он просто использует индексацию. Второй способ с использованием slice
создает новый массив, содержащий только последний элемент, что может быть менее эффективно, но выглядит более "красиво" и читаемо.
Если производительность критична, вы можете выбирать первый вариант. Если читаемость кода важнее, тогда второй вариант будет предпочтительным. Рекомендуется также проверить производительность в своем конкретном случае, воспользовавшись, например, jsPerf.
Вот как получить последний элемент массива, не затрагивая оригинальный массив:
a = [1, 2, 5, 6, 1, 874, 98, "abc"];
a.length; // возвращает 8 элементов
Если вы используете метод pop()
, то он изменит ваш массив:
a.pop(); // вернет "abc" и УДАЛИТ его из массива
a.length; // возвращает 7
Но вы можете сделать так, чтобы это не повлияло на оригинальный массив:
a.slice(-1).pop(); // вернет "abc", не изменив массив
// потому что slice создает новый объект массива
a.length; // возвращает 8; никаких модификаций, и вы получили ваш последний элемент
Таким образом, использование slice()
в сочетании с pop()
позволяет получить последний элемент без изменения исходного массива.
Обновление: С 2022 года можно использовать метод at()
для получения последнего элемента массива:
const y = x.at(-1);
Тем не менее, вы по-прежнему можете использовать более традиционный способ:
const y = x[x.length - 1];
Выбор зависит от ваших предпочтений и требований к коду.
Как перемешать (сделать случайным) массив в JavaScript?
Как объединить два массива в JavaScript и удалить дубликаты?
Как очистить массив в JavaScript?
Как удалить все дубликаты из массива объектов?
Выбор последнего элемента в массиве JavaScript