Hier ist mein bisheriger JavaScript-Code:
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);
Derzeit wird das vorletzte Element im Array von der URL übernommen. Ich möchte jedoch überprüfen, ob das letzte Element im Array vorhanden ist, "index.html"
und in diesem Fall stattdessen das drittletzte Element abrufen.
javascript
arrays
Balexander
quelle
quelle
const [lastItem] = arr.slice(-1)
.pop()
Entfernt das letzte Element, das das ursprüngliche Array ändert. Es ist nicht dasselbe wie einfach diesen Wert abzurufen.Verwenden Sie Array.pop :
Wichtig : Dies gibt das letzte Element zurück und entfernt es aus dem Array
quelle
Eine kürzere Version von dem, was @chaiguy gepostet hat:
Das Lesen des -1-Index kehrt
undefined
bereits zurück.BEARBEITEN:
Heutzutage scheint die Präferenz darin zu bestehen, Module zu verwenden und zu vermeiden, den Prototyp zu berühren oder einen globalen Namespace zu verwenden.
quelle
var lastItem = [3,2,1,5].last();
. Der Wert vonlastItem
ist5
.Do NOT modify objects you Do NOT own
. Dies ist aus vielen Gründen gefährlich, z. B. 1. Andere Entwickler in Ihrem Team können verwirrt sein, da diese Methode nicht Standard ist. 2. Bei einem Update in Bibliotheken oder sogar bei Verwendung einer niedrigeren oder höheren ECMAScript-Version kann es leicht zu VERLOREN kommen!Array.prototype
, aber Sie sollten verwendenObject.assign(Array.prototype, 'last', { value: function () { … } });
. Andernfalls wird die Eigenschaft aufgezählt.Zwei Optionen sind:
oder
Ersteres ist schneller, letzteres sieht aber besser aus
http://jsperf.com/slice-vs-length-1-arr
quelle
Hier erfahren Sie, wie Sie es ohne Auswirkung auf das Original ARRAY erhalten
Wenn Sie pop () verwenden, wird Ihr Array geändert
Sie können dies jedoch verwenden, damit es keine Auswirkungen auf das ursprüngliche Array hat:
quelle
pop()
Dann brauchen Sie das nicht : tun Sie es einfacharr.slice(-1)[0]
Der "sauberste" ES6-Weg (IMO) wäre:
Dies vermeidet eine Mutation
foo
, wie dies der Fall.pop()
wäre, wenn wir den Spread-Operator nicht verwendet hätten.Das heißt, ich mag auch die
foo.slice(-1)[0]
Lösung.quelle
.slice(-1)[0]
aber es ist langsamer..slice
Ich würde lieber
array.pop()
als Indizes verwenden.Auf diese Weise erhalten Sie immer das Element vor index.html (vorausgesetzt, Ihr Array hat index.html als ein Element isoliert). Hinweis: Sie verlieren jedoch die letzten Elemente aus dem Array.
quelle
Ich denke, wenn Sie nur das Element ohne entfernen erhalten möchten, ist dies einfacher:
Hinweis: Wenn das Array leer ist (z. B.
[]
), wird dies zurückgegebenundefined
.Übrigens ... ich habe die Leistung nicht überprüft, aber ich denke, es ist einfacher und sauberer zu schreiben
quelle
arr.slice(-1)[0] === arr[arr.length - 1]
), und b) es langsam ist, weil esarr
in ein neues Array kopiert wird ( Leistungsmessung siehe stackoverflow.com/a/51763533/2733244 ).const [lastItem] = array.slice(-1);
Array.prototype.slice mit -1 kann verwendet werden, um ein neues Array zu erstellen, das nur das letzte Element des ursprünglichen Arrays enthält. Anschließend können Sie mithilfe der Destructuring Assignment eine Variable mit dem ersten Element dieses neuen Arrays erstellen.
quelle
Das Abrufen des letzten Elements eines Arrays kann mithilfe der Slice- Methode mit negativen Werten erreicht werden.
Mehr dazu lesen Sie hier unten.
Die Verwendung von pop () ändert Ihr Array, was nicht immer eine gute Idee ist.
quelle
arr.slice(-1)[0]
, wie diese Antwort .array[array.length - 1]
jsperf.com/get-last-item-from-array/13Sie können dieses Muster verwenden ...
Denken Sie daran, dass es ein neues Array erstellt, sodass es weniger effizient ist als andere Lösungen, aber es wird fast nie der Leistungsengpass Ihrer Anwendung sein.
quelle
Diese Frage gibt es schon lange, daher bin ich überrascht, dass niemand erwähnt hat, dass nur das letzte Element nach a wieder aufgesetzt wird
pop()
.arr.pop()
ist genau so effizient wiearr[arr.length-1]
und beide haben die gleiche Geschwindigkeit wiearr.push()
.Daher können Sie davonkommen mit:
--- BEARBEITET [überprüfen Sie, dass
thePop
nichtundefined
vor dem Drücken] ------ END EDIT ---
Was auf diese reduziert werden kann (gleiche Geschwindigkeit [EDIT: aber unsicher!]):
Das ist doppelt so langsam wie
arr[arr.length-1]
, aber Sie müssen nicht mit einem Index herumspielen. Das ist an jedem Tag Gold wert.Von den Lösungen, die ich ausprobiert habe, und in Vielfachen der Execution Time Unit (ETU) von
arr[arr.length-1]
:[Methode] .............. [ETUs 5 Elemente] ... [ETU 1 Million Elemente]
Die letzten drei Optionen werden INSBESONDERE
[...arr].pop()
mit zunehmender Größe des Arrays SEHR viel schlechter. Auf einem Computer ohne die Speicherbeschränkungen meines Computers wird[...arr].pop()
wahrscheinlich das Verhältnis 120: 1 beibehalten. Trotzdem mag niemand ein Ressourcenschwein.quelle
[]
wird zu[undefined]
. Sie müssen Rückwärtsschub mit expliziterundefined
Prüfung schützen , so etwas wiemyPop !== undefined && arr.push(myPop)
Wenn jemand das letzte Element auf einmal erhalten möchte, kann er / sie Folgendes verwenden
Array#splice()
:Hier besteht keine Notwendigkeit, die geteilten Elemente in einem Array zu speichern und dann zum letzten Element zu gelangen. Wenn das einzige Ziel darin besteht, das letzte Element zu erhalten, sollte dies verwendet werden.
Hinweis: Dadurch wird das ursprüngliche Array geändert, indem das letzte Element entfernt wird. Stellen Sie sich
splice(-1,1)
einepop()
Funktion vor, die das letzte Element öffnet.quelle
["hi"]
vs"hi"
.Für diejenigen, die keine Angst haben, den Array-Prototyp zu überladen (und mit Aufzählungsmaskierung sollten Sie es nicht sein):
quelle
jQuery löst dies ordentlich:
quelle
Ich benutze normalerweise Unterstriche , damit kannst du es einfach machen
Für mich ist das semantischer als
loc_array.slice(-1)[0]
quelle
Hier ist mehr Javascript-Kunst, wenn Sie hierher gekommen sind, um danach zu suchen
Im Geiste einer anderen Antwort, die verwendet wurde
reduceRight()
, aber kürzer:Dies hängt davon ab, dass für den Fall, dass Sie keinen Anfangswert angeben, das allerletzte Element als Anfangswert ausgewählt wird (siehe Dokumente hier ). Da der Rückruf immer wieder den Anfangswert zurückgibt, wird am Ende das letzte Element zurückgegeben.
Beachten Sie, dass dies als Javascript-Kunst betrachtet werden sollte und keineswegs die Art und Weise ist, wie ich es empfehlen würde, hauptsächlich, weil es in O (n) -Zeit ausgeführt wird, aber auch, weil es die Lesbarkeit beeinträchtigt.
Und jetzt zur ernsthaften Antwort
Der beste Weg, den ich sehe (wenn man bedenkt, dass Sie es prägnanter wollen als
array[array.length - 1]
), ist folgender:Dann nutzen Sie einfach die Funktion:
Die Funktion ist tatsächlich nützlich, wenn Sie mit einem anonymen Array wie dem
[3, 2, 1, 5]
oben verwendeten arbeiten, andernfalls müssten Sie es zweimal instanziieren, was ineffizient und hässlich wäre:Pfui.
In diesem Fall haben Sie beispielsweise ein anonymes Array und müssten eine Variable definieren. Sie können jedoch Folgendes verwenden
last()
:quelle
Setzen Sie hier einfach eine andere Option.
Ich fand den obigen Ansatz sauberer und kurzer Onliner. Bitte zögern Sie nicht, dieses zu versuchen.
Hinweis: Das ursprüngliche Array wird geändert. Wenn Sie es nicht ändern möchten, können Sie es verwenden
slice()
Vielen Dank an @VinayPai für den Hinweis.
quelle
Mehrere Möglichkeiten, den letzten Wert eines Arrays in Javascript zu finden
quelle
console.log(arr.reverse()[0])
- Herzlichen Glückwunsch, Sie haben gerade das ursprüngliche Array geändert.Dies ist aus Sicht der Leistung die beste Option (~ 1000-mal schneller als arr.slice (-1)).
quelle
Persönlich würde ich die Antwort von kuporific / kritzikratzi positiv bewerten. Die Methode array [array.length-1] wird sehr hässlich, wenn Sie mit verschachtelten Arrays arbeiten.
quelle
In ECMAScript-Vorschlag Stufe 1 gibt es einen Vorschlag zum Hinzufügen einer Array-Eigenschaft, die das letzte Element zurückgibt: Vorschlag-Array-Letzte .
Syntax:
Sie können Polyfill verwenden .
Verfasser des Vorschlags: Keith Cirkel ( chai autor)
quelle
Um zu verhindern, dass das letzte Element aus dem Ursprungsarray entfernt wird, können Sie es verwenden
Wird meistens von allen Browsern unterstützt (ES6)
quelle
Sie können
last()
demArray
Prototyp eine Funktion hinzufügen .quelle
Was immer Sie tun nicht nur verwenden
reverse()
!!!In einigen Antworten wird
reverse
die Tatsache erwähnt, aber nicht erwähnt, dassreverse
das ursprüngliche Array geändert wird und keine Kopie (wie in einer anderen Sprache oder einem anderen Framework) zurückgegeben wird.Dies kann die schlechteste Art von Code zum Debuggen sein!
quelle
[...animals].reverse()
[1,3,4,5,"last"].slice().reverse()[0]
Die Zerstörung von ES6-Objekten ist ein weiterer Weg.
Sie extrahieren die Längeneigenschaft mithilfe der Objektdestrukturierung aus dem Array. Sie erstellen einen weiteren dynamischen Schlüssel mit dem bereits extrahierten Schlüssel von [Länge-1] und weisen ihn dem letzten zu , alles in einer Zeile.
quelle
Sie können dem Prototyp von einen neuen Property Getter hinzufügen , damit auf alle Instanzen von zugegriffen werden kann .
Array
Array
Mit Getters können Sie auf den Rückgabewert einer Funktion zugreifen, als wäre es der Wert einer Eigenschaft. Der Rückgabewert der Funktion ist natürlich der letzte Wert des Arrays (
this[this.length - 1]
).Schließlich wickeln Sie es in eine Bedingung ein, die prüft, ob die
last
Eigenschaft noch vorhanden istundefined
(nicht durch ein anderes Skript definiert, das möglicherweise darauf angewiesen ist).Funktioniert nicht in IE ≤ 8.
quelle
Array.prototype.last
ist immerundefined
? Das if funktioniert nicht unter Chrome 36EDITIERT:
Kürzlich habe ich eine weitere Lösung gefunden, die meiner Meinung nach die beste für meine Bedürfnisse ist:
Mit der obigen Definition kann ich jetzt sagen:
Der Name "w" steht für "Wrapper". Sie können sehen, wie Sie diesem Wrapper neben 'last ()' problemlos weitere Methoden hinzufügen können.
Ich sage "am besten für meine Bedürfnisse", weil ich auf diese Weise jedem integrierten JavaScript-Typ problemlos andere "Hilfsmethoden" hinzufügen kann. Was mir in den Sinn kommt, sind zum Beispiel das Auto () und das CDR () von Lisp.
quelle
w
Funktion aufrufen müssen, lassen Sie die Funktion einfach das letzte Element zurückgeben.w([1,2,3]).length
ist nicht definiert.w([1,2,3])[1]
ist nicht definiert. Kommt mir nicht wie ein Wrapper vor. Und es gibt einen Syntaxfehler. Sie haben ein zusätzliches ';'. Unter stackoverflow.com/a/49725374/458321 erfahren Sie, wie Sie einen Klassen-Wrapper (SutString-Klasse) schreiben und diesen Wrapper mithilfe von Reflection füllen. Imho, Wrapper sind allerdings übertrieben. Verwenden Sie besser die Kapselung, wie Sie es fast getan haben.return { arr: anArray, last() { return anArray[anArray.length - 1]; } };
. Außerdem ist w viel zu allgemein. Aufruf ist ArrayW oder so.Ich denke, der einfachste und ineffizienteste Weg ist:
quelle