21

Получить последний элемент массива

13

У меня есть следующий код на 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 ответ(ов)

16

Не уверен, есть ли у этого подхода недостатки, но он выглядит довольно лаконично:

arr.slice(-1)[0]

или

arr.slice(-1).pop()

Оба варианта вернут undefined, если массив пуст.

Если говорить о различиях, то в первом случае метод slice(-1) создает новый массив, содержащий последний элемент, и вы сразу обращаетесь к первому элементу этого нового массива. Во втором случае, метод pop() удаляет последний элемент из массива и возвращает его, но если массив пуст, то подразумевается, что этот метод просто вернет undefined. В общем, оба варианта одинаково безопасны для пустых массивов, но стоит учитывать, что pop() изменяет оригинальный массив.

2

Короткая версия того, что уже упоминал @chaiguy:

Array.prototype.last = function() {
    return this[this.length - 1];
}

Чтение по индексу -1 уже возвращает undefined.

ИЗМЕНЕНИЕ:

В последнее время предпочтительнее использовать модули и избегать изменения прототипа или использования глобальной области видимости.

export function last(array) {
    return array[array.length - 1];
}
2

В вашем вопросе рассматриваются два способа получить последний элемент массива в JavaScript:

  1. Использование свойства length:

    var last = arr[arr.length - 1];
    
  2. Использование метода slice:

    var last = arr.slice(-1)[0];
    

Первый способ, который обращается к последнему элементу массива через length, как правило, работает быстрее, поскольку он просто использует индексацию. Второй способ с использованием slice создает новый массив, содержащий только последний элемент, что может быть менее эффективно, но выглядит более "красиво" и читаемо.

Если производительность критична, вы можете выбирать первый вариант. Если читаемость кода важнее, тогда второй вариант будет предпочтительным. Рекомендуется также проверить производительность в своем конкретном случае, воспользовавшись, например, jsPerf.

0

Вот как получить последний элемент массива, не затрагивая оригинальный массив:

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() позволяет получить последний элемент без изменения исходного массива.

0

Обновление: С 2022 года можно использовать метод at() для получения последнего элемента массива:

const y = x.at(-1);

Тем не менее, вы по-прежнему можете использовать более традиционный способ:

const y = x[x.length - 1];

Выбор зависит от ваших предпочтений и требований к коду.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь