jQuery entspricht Prototype array.last ()

69

Prototyp:

var array = [1,2,3,4];
var lastEl = array.last();

Ähnliches in jQuery?

Harry
quelle

Antworten:

144

Warum nicht einfach einfaches Javascript verwenden?

var array=[1,2,3,4];
var lastEl = array[array.length-1];

Sie können es auch als Methode schreiben, wenn Sie möchten (vorausgesetzt, der Prototyp wurde nicht auf Ihrer Seite aufgenommen):

Array.prototype.last = function() {return this[this.length-1];}
Salzig
quelle
1
weil so etwas wie das folgende nicht gut aussehen wird: $ ('a'). attr ('href'). split ('#'). last (); <- natürlich ist last () hier keine Abfragefunktion ... es ist nur ein Beispiel
7
Sieht gut für mich aus. Warum sagst du das nicht? Der Aufruf von .split () beendet die Kettenfähigkeit, sodass dort kein Verlust entsteht.
Ken Browning
13
Das ist falsch. Wenn das Array leer ist, suchen Sie nacharray[-1]
DisgruntledGoat
7
@ DisgruntledGoat ... die zurückkehren wird undefined. Das ist das gleiche wie das Verhalten von Prototype
Jo Liss
4
Du hast seine Frage nicht beantwortet. Ja, rohes Javascript mag überlegen sein, aber die Frage war ein jQuery-Äquivalent. Ihre vorgeschlagene Lösung kann in einigen jQuery-Szenarien (selbst erlebt) zu unerwünschten Umständen führen
Sandwich
82

mit Slice ():

var a = [1,2,3,4];
var lastEl = a.slice(-1)[0]; // 4
// a is still [1,2,3,4]

mit pop ();

var a = [1,2,3,4];
var lastEl = a.pop(); // 4
// a is now [1,2,3]

Weitere Informationen finden Sie unter https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array

Guybrush
quelle
11
Warum nicht einfach .slice().pop()das Array kopieren und ein Element von der Kopie entfernen?
Gnarf
1
@gnarf Ich denke, weil das Kopieren des gesamten Arrays mit .slice()teurer sein kann als das Kopieren nur des letzten Elements mit.slice(-1)
Oriol
22

Wenn Sie mit einem jQuery-Objekt .last()arbeiten, filtern Sie die übereinstimmenden Elemente nur auf das letzte Element in der Gruppe.

Natürlich können Sie ein natives Array mit jQuery umschließen, was dazu führt:

var a = [1,2,3,4];
var lastEl = $(a).last()[0];
Zwerg
quelle
12

Warum nicht die Funktion get verwenden?

var a = [1,2,3,4];
var last = $(a).get(-1);

http://api.jquery.com/get/ Weitere Informationen

Bearbeiten: Wie von DelightedD0D hervorgehoben, ist dies nicht die richtige Funktion, die gemäß den Dokumenten von jQuery verwendet werden kann, liefert aber dennoch die richtigen Ergebnisse. Ich empfehle, die Antwort von Salty zu verwenden, um Ihren Code korrekt zu halten.

Muhan Alim
quelle
1
Angesichts der gestellten Frage halte ich dies für die relevanteste und eleganteste Antwort. Gemäß jQuery-Dokumenten: "Ein negativer Index wird ab dem Ende des übereinstimmenden Satzes gezählt, sodass dieses Beispiel das letzte Element in der Liste zurückgibt:" Danke.
Pavel Lechev
1
Das ist falsch , .get() - Retrieve the DOM elements matched by the jQuery object.. Dies ist nicht für ein Array wie dieses vorgesehen.
Wesley Smith
1
@ DelightedD0D Sie haben in diesem Fall den Teil "Warum nicht" meiner Antwort beantwortet.
Muhan Alim
2

Für Arrays können Sie einfach die letzte Elementposition abrufen mit array.length - 1:

var a = [1,2,3,4];

var lastEl = a[a.length-1]; // 4

In jQuery haben Sie den Selektor : last , aber dies hilft Ihnen bei einfachen Arrays nicht weiter.

Christian C. Salvadó
quelle
2

Wenn Sie den Prototyp für Arrays verwenden wie:

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

Die Verwendung von Forloops wird dies tun.

var a = [0,1,2];
out --> 0
out --> 1
out --> 2
out --> last
Martin
quelle
Sie sollten hasOwnProperty verwenden, um dies zu vermeiden.
Bersam
2

Ich weiß, dass die Antwort bereits gegeben ist, aber ich denke, ich habe eine andere Lösung dafür. Sie können das Array nehmen, umkehren und das erste Array-Element wie folgt ausgeben:

var a = [1,2,3,4];
var lastItem = a.reverse () [0];

Funktioniert gut für mich.

Mantikor
quelle
1
Das Umkehren des Arrays, um den letzten Wert zu erhalten, ist unnötig teuer. Außerdem wird das ursprüngliche Array geändert.
Sergi Ramón
Die Methode gibt immer noch das letzte Element zurück. Ich sehe also keinen Grund für Abstimmungen. +1 hier.
Pawka
2
Junge, dein Prozessor braucht mehr Arbeit für das gleiche Ergebnis. Es ist eine Verschwendung von Ressourcen ohne Gewinn. Kannst du das nicht sehen? Das "Just Works For Me" ist ein lächerliches Mantra.
Miguelsan
1

Laut jsPerf: Last item-Methode ist die Methode mit der höchsten Leistung array[array.length-1]. Das Diagramm zeigt Operationen pro Sekunde an, nicht die Zeit pro Operation.

Entwickler denken häufig (aber falsch), dass die Leistung eines einzelnen Vorgangs von Bedeutung ist. Es tut nicht. Leistung ist nur wichtig, wenn Sie VIELE gleiche Operationen ausführen. In diesem Fall ist die Verwendung eines statischen Werts ( length) für den Zugriff auf einen bestimmten Index ( length-1) am schnellsten und nicht einmal in der Nähe.

Michael Blackburn
quelle
0

Siehe diese Testfälle http://jsperf.com/last-item-method Der effektivste Weg ist die .pop-Methode (in V8), verliert jedoch das letzte Element des Arrays

individuo7
quelle
1
Es wird viel darüber geredet, dass dieser oder jener Weg performanter ist. Jemand veröffentlicht einen Link, der die Leistung demonstriert, und keine positiven Stimmen. Das liegt natürlich wahrscheinlich daran, dass er die Grafik rückwärts gelesen hat. Ich habe seine Kommentare korrigiert und erweitert.
Michael Blackburn
1
@ MichaelBlackburn Hey! Ich habe Ihre Bearbeitung in der Überprüfungswarteschlange entdeckt und dachte, ich sollte erklären, warum sie abgelehnt wurde, obwohl sie genauer war. Einfach: Änderungen sollten den Inhalt eines Beitrags nicht ändern, auch nicht um sachliche Fehler zu beheben. Stattdessen ist es am besten, solche Antworten herunterzustimmen und einen Kommentar zu hinterlassen, in dem erklärt wird, warum. Sie sind natürlich absolut korrekt, also könnten Sie vielleicht Ihre eigene Antwort mit genauen Leistungsinformationen hinzufügen ? Ich würde es positiv bewerten! :)
Jordan Gray
0

SugarJS

Es ist nicht jQuery, sondern eine andere Bibliothek, die Sie möglicherweise zusätzlich zu jQuery nützlich finden: Probieren Sie SugarJS aus .

Sugar ist eine Javascript-Bibliothek, die native Objekte mit hilfreichen Methoden erweitert. Es ist so konzipiert, dass es intuitiv und unauffällig ist und Sie mit weniger Code mehr erreichen können.

Mit SugarJS können Sie Folgendes tun:

[1,2,3,4].last()    //  => 4

Das heißt, Ihr Beispiel funktioniert sofort:

var array = [1,2,3,4];
var lastEl = array.last();    //  => 4

Mehr Info

fiedl
quelle
0

URL: www.mydomain.com/user1/1234

$ .params = window.location.href.split ("/"); $ .params [$. params.length-1];

Sie können basierend auf Ihrem Abfragezeichenfolgen-Trennzeichen aufteilen

Bharat Parmar
quelle
0

Ich benutze das:

array.reverse()[0]

Sie kehren das Array mit reverse () um und wählen dann das erste Element der umgekehrten Version mit [0] aus, dh das letzte Element des ursprünglichen Arrays.

Sie können diesen Code verwenden, wenn Sie sich nicht darum kümmern, dass das Array natürlich umgekehrt wird, da dies so bleibt.

SevenJay
quelle
Kehren Sie das Array um und wählen Sie die erste der umgekehrten Version aus, also die letzte des Originals
SevenJay
Dies ist O (n), da das gesamte Array umgekehrt wird, auch wenn Sie nur den letzten Eintrag benötigen. Die Antwort von Salty lautet O (1), was schneller ist, wenn das Array lang wird.
pixatlazaki