Подтвердить что ты не робот

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

Как я могу получить последний второй элемент в массиве?

Например,

var fragment = '/news/article-1/'
var array_fragment = fragment.split('/');
var pg_url = $(array_fragment).last()[0];

Это возвращает пустое значение. Но я хочу получить article-1

Спасибо.

4b9b3361

Ответ 1

Не все должно быть выполнено с помощью jQuery.

В обычном старом javascript вы можете:

var pg_url = array_fragment[array_fragment.length - 2]

Легче и быстрее:)

Ответ 2

Похоже, вы также можете использовать метод Javascript slice:

> path = 'a/b/c/d';
> path.split('/').slice(-2, -1)[0];
'c'

Вы также можете думать о "от второго до последнего элемента в массиве" как "второй элемент массива обратного":

> path = 'a/b/c/d';
> path.split('/').reverse()[1];
'c'

Ответ 3

Шаг 1: Используйте метод split() для разбиения элементов на массив.

var fragment_arr = fragment.split("/");

Шаг 2: Используйте slice (-2) Метод для выбора последнего 2 элемента из массива, отрицательного числа для выбора из конца массива.

var lastTwo = fragment_arr.slice(-2);

Шаг 3: lastTwo массив содержит последние два элемента fragment_arr, теперь вы можете получить доступ, как этот

var element = lastTwo[0];
alert(element);

Короткий ответ: вы можете комбинировать шаги 2 и 3 следующим образом.

var element = fragment_arr.slice(-2)[0];
alert(element);

Ответ 4

var pg_url = array_fragment[array_fragment.length -2]

array_fragment не является переменной jquery, это простая старая javascript-переменная, поэтому нет необходимости в $()

Ответ 5

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

При расширении чего-то большего размера и использования в качестве прототипа Array убедитесь, что вы не собираетесь влиять на какую-либо другую часть его использования. Это делается путем проверки того, что свойство не перечислимо, так что for in не будет подавлять в другом месте (некоторые люди и библиотеки используют for in для итерации массивов).

Object.defineProperty(Array.prototype, 'rev', {
  enumerable: false,
  value: function(index){
    return this[this.length - 1 - index];
  }
});

document.write([1,2,3,4,5,6].rev(1));

Ответ 6

Следующие строки работают с строкой с частями n-го 'url'.

var fragment = '/t/e/s/t/i/n/g/';
var fragment = '/t/';

Если фрагмент имеет переменную длину, вам нужно решение, которое работает для различных размеров фрагментов.

var fragment = '/news/article-1/';
var array_fragment = fragment.split('/');

Разделить разделяет строку фрагмента, в которой он находит '/'. Split принимает значение до и после разделительного символа. В этом случае нет ничего перед первой косой чертой или после последней косой черты. Пустые значения добавляются в array_fragment в позиции первого и последнего массивов.

jQuery
var pg_url = $(array_fragment)[$(array_fragment).length - 2];

javascript
var pg_url = array_fragment[array_fragment.length - 2];

Как вы можете видеть, jQuery не требуется для этого решения.

Array_fragment.length - 2 подсчитывает длину массива array_fragment и выбирает второй элемент из конца. Последнее значение - "" из-за Split ('/'), добавляющего пустое значение в конец массива array_fragment.

Упрощенный и все вместе:

var f = '/t/e/s/t/i/n/g/'.split('/');
f[f.length - 2]