2011-06-27 13 views
27

Jak mogę uzyskać ostatni drugi element w tablicy?uzyskać drugi do ostatniego elementu tablicy?

Przykładowo

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

ta zwraca pusty wartość. Ale chcę uzyskać article-1

Dzięki.

Odpowiedz

49

Nie wszystko musi być zrobione przy użyciu jQuery.

In Plain Old javascript można zrobić:

var pg_url = array_fragment[array_fragment.length - 2] 

Łatwiejsze i szybsze :)

+2

że dostaje ostatni element, a nie jeden przedostatni. Zmodyfikowano – lonesomeday

+0

. dzięki –

+0

to magia! Dzięki wielkie! :-) – laukok

1
var pg_url = array_fragment[array_fragment.length -2] 

array_fragment nie jest zmienną jQuery, jest to zwykły stary zmienna javascript, więc nie potrzeba $()

34

Wygląda na to, można również użyć javaScript w slice metody:

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

Można również pomyśleć o „drugi do ostatniego elementu tablicy” jako „drugi element tablicy odwrócony”:

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

ta odpowiedź jest znacznie bardziej elegancka i użyteczna niż zaakceptowana. – smnbbrv

1

Jeśli dostęp do tablic w odwrocie jest coś, co będzie często wymagane , a nie tylko drugi do ostatniego indeksu, można użyć prostej rozbudowy do prototypu.

Podczas rozszerzania czegoś tak dużego i używanego jak prototyp Array upewnij się, że nie wpłynie to na żadną inną część jego użytkowania. Odbywa się to poprzez upewnienie się, że właściwość nie jest wymienna, aby for in nie dusić nigdzie indziej (niektórzy ludzie i biblioteki używają for in do iterowania tablic).

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));

I teraz można używać zera indeksowanie siedzibą w odwrotnej kolejności.

+0

Zwykle nie jest dobrym pomysłem wprowadzanie zmian w prototypie ... –

8

Krok 1: Użyj split() Metoda podziału elementów na tablicę.

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

Etap 2: Zastosowanie plaster (-2) Sposób wybrać ostatniego elementu 2 z tablicy, liczba ujemna wybrać z końca tablicy.

var lastTwo = fragment_arr.slice(-2); 

Krok 3: lastTwo tablica zawiera dwa ostatnie elementy fragment_arr, teraz można uzyskać dostęp jak ten

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

krótka odpowiedź: można połączyć krok 2 i 3 jak poniżej

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

Jeśli twoja odpowiedź brzmi" spróbuj tego " , to nie jest odpowiedź. To jest komentarz. Aby napisać przydatną odpowiedź, dodaj opis. –

+0

Nie zapewnia to odpowiedzi na pytanie. Aby skrytykować lub poprosić o wyjaśnienie od autora, pozostaw komentarz pod swoim postem. - [Z recenzji] (/ opinia/niskiej jakości-posts/11238794) –

+0

@ Danielocheung - Myślę, że zaktualizowałem to, czego oczekujesz i nauczyłem się prezentować odpowiedź. Dziękuję. – 151291

0

Następujące prace dotyczą ciągu z n-tymi częściami "url".

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

Jeśli fragment ma zmienną długość, potrzebne jest rozwiązanie, które działa dla różnych rozmiarów fragmentów.

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

podziału oddziela ciąg fragment, jeśli stwierdzi, '/' s. Split przyjmuje wartość przed i po podzielonym znaku. W tym przypadku nie ma nic przed pierwszym ukośnikiem lub po ostatnim ukośniku. Puste wartości są dodawane do elementu array_fragment w pierwszej i ostatniej pozycji tablicy.

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

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

Jak widać, jQuery nie jest potrzebny do tego rozwiązania.

Array_fragment.length - 2 zlicza długość elementu array_fragment i wybiera drugi element od końca. Ostatnia wartość to "" ze względu na Split ("/") dodawanie pustej wartości na końcu tablicy array_fragment.

uproszczony i wszystko razem wzięte:

var f = '/t/e/s/t/i/n/g/'.split('/'); 
f[f.length - 2] 
0
const myArray: Array<string> = ['first', 'second', 'third']; 

Podział myArray przez przedostatniej pozycji.

const twoItemsFromEnd = myArray.slice(-2); //Outputs: ['second', 'third'] 

Następnie

const secondLast = twoItemsFromEnd[0]; 

Lub:

const secondLast = (params.slice(-2))[0]; 
+0

[JJ Geewax] (https://stackoverflow.com/a/24331358/6225838) odpowiedź tutaj już obejmuje twoją odpowiedź ... Jest to w rzeczywistości prostsze i bardziej szczegółowe, ponieważ używa drugiego parametru plasterka dla tablicy do ma tylko przedostatni element bez deklarowania innych zmiennych (np. '[1,2,3] .slice (-2, -1) [0] === 2') – CPHPython

Powiązane problemy