Entfernen Sie das letzte Element aus dem Array

439

Ich habe das folgende Array.

var arr = [1,0,2];

Ich möchte das letzte Element entfernen, dh 2.

Ich habe verwendet, arr.slice(-1);aber es entfernt den Wert nicht.

Prithviraj Mitra
quelle
36
benutze arr .pop ()
Tushar Gupta - curioustushar
3
arr.splice (-1,1) kehrt zu Ihrem Array zurück [1,0]; arr.slice (-1,1) wird zu dir zurückkehren [2]
Anja Ishmukhametova
10
arr.slice(0,-1)war die beste Lösung für mich
Black Mamba
3
Die Frage ist etwas mehrdeutig, da "letztes Element entfernen" bedeuten kann, dass das Element aus dem Array entfernt und das Array beibehalten wird (mit einem Element weniger). Es kann aber auch bedeuten, das Element zu entfernen und das Element beizubehalten. Erster Fall : splice(), zweiter Fall : pop().
Thoni56

Antworten:

516

Verwenden Sie Spleiß (Index, Howmany)

arr.splice(-1,1)
Anton
quelle
1
@PrithvirajMitra Sie möchten 1 und 0 entfernen? Also das Array == [2]?
Anton
3
Funktioniert nicht für Ein-Element-Arrays: [1].splice(-1, 1)=>[1]
Tvaroh
135
Dies ist NICHT die beste Lösung. Die beste ist die Pop-Funktion. Nicht das.
Tommix
6
Pop alleine gibt nur den Wert des letzten Elements zurück. Wenn ich das richtig verstehe, möchte @PrithvirajMitra zwei Dinge: 1) Das letzte Element aus dem ursprünglichen Array entfernen und 2) dieses Element als einzelnes Elementarray zurückgeben - dh: [0,1,2] -> [2]zurücklassen [0,1]. Wenn das der Fall ist, dann [arr.pop()]wird der Trick tun.
Ben Hull
11
Beachten Sie, dass array.pop()sich Änderungen ändern array, slice(0, -1)nicht jedoch. Pop ist natürlich schneller, aber möglicherweise nicht immer für alle Bedürfnisse geeignet.
Adelriosantiago
619

Array.prototype.pop () nach JavaScript-Konvention.

let fruit = ['apple', 'orange', 'banana', 'tomato'];
let popped = fruit.pop();

console.log(popped); // "tomato"
console.log(fruit); // ["apple", "orange", "banana"]
Stuart Kershaw
quelle
7
Array.prototype.pop () scheint der schnellste jsperf.com/slice-vs-splice-vs-pop/3
Daniel
1
Achten Sie bei der Verwendung von pop () darauf, dass Sie nicht jQuery ('# foo'). Val (numbers.pop ()) ausführen, es sei denn, Sie möchten nur das letzte Element des Arrays in das Feld einfügen. pop () gibt das entfernte Element zurück. Machen Sie wie Stuart zuerst numbers.pop (); und dann jQuery ('# foo'). val (Zahlen) ...
Charles Robertson
4
Beste Lösung +1
mdlars
2
Es wäre cool, unpop () zu haben, das den Rest des Arrays zurückgibt.
Eomeroff
2
Gibt es eine Möglichkeit, dies zu tun, während das Array unveränderlich bleibt?
Nayiaw
263

Sie können dies mit folgenden .slice()Methoden tun :

arr.slice(0, -1);    // returns [1,0]

Hier ist eine Demo:

var arr = [1, 0, 2];
var newArr = arr.slice(0, -1);    // returns [1,0]

console.log(newArr);
$('#div1').text('[' + arr + ']');
$('#div2').text('[' + newArr + ']');
<script src="http://code.jquery.com/jquery.min.js"></script>
<b>Original Array    : </b>
<div id="div1"></div>
<br/>
<b>After slice(0, -1): </b>
<div id="div2"></div>

anstatt zu tun:

arr.slice(-1);   // returns [2]

Hier ist eine Demo:

var arr = [1, 0, 2];
var newArr = arr.slice(-1);    // returns [2]

console.log(newArr);
$('#div1').text('[' + arr + ']');
$('#div2').text('[' + newArr + ']');
<script src="http://code.jquery.com/jquery.min.js"></script>
<b>Original Array    : </b>
<div id="div1"></div>
<br/>
<b>After slice(-1): </b>
<div id="div2"></div>

Erläuterung:-

Die grundlegende Syntax der Array.prototype.slice()oder kurz slice()Methode lautet nun:

arr.slice([begin[, end]])

Hier,

Der beginParameter ist ein auf Null basierender Index, bei dem die Extraktion aus einem Array beginnt. Nehmen wir also am obigen Beispiel an, wenn wir so etwas tun

arr.slice(0)    // returns [1,0,2]

es würde alle Array-Elemente vom Beginn der Sequenz von Position 0 zurückgeben und das heißt [1,0,2]. Ebenso, wenn wir es tun

arr.slice(1)    // returns [0,2]

es würde zurückkehren, [0,2]da 0 hier an Position 1 ist und alles danach. In Ihrem Fall haben Sie nun einen negativen Index -1als Startparameter übergeben, der einen Versatz vom Ende der Sequenz angibt. Also, slice(-1)in Ihrem Fall extrahiert das letzte Array - Element in der Sequenz und das ist2 ( wie wir bereits in der obigen Demo gesehen haben ).

Lassen Sie uns nun über den endParameter in der slice()Methodensyntax sprechen . Es ist wieder ein auf Null basierender Index, bei dem die Extraktion aus einem Array endet. Nehmen wir also an, wir haben ein Array wie: -

var arr = [1, 0, 2, 5, 3, 9];

und wir wollen nur die 2,5,3Elemente im Array bekommen. Nun Position 2aus der Sequenz starten ist 2und für letztes Element 3ist 4. Wir müssen die Extraktion hier um Position 5 beenden, da wir das Element vor dieser Position erhalten müssen. Also werden wir einfach implementierenslice() Methode wie

arr.slice(2, 5)    // returns [2,5,3]

In Ihrem Fall haben wir als Endparameter implementiert -1, sodass unser Code wie folgt ist

arr.slice(0, -1)   // returns [1,0]

Gibt als negativer Index endeinen Versatz vom Ende der Sequenz an. So, slice(0,-1)extrahiert das erste Element durch das zweite bis letztes Element in der Sequenz. So erhalten wir die gewünschte Ausgabe. Wir können auch gerne machen

arr.slice(0, 2)    // returns [1,0]

Wir werden die gleiche Ausgabe erhalten. Aber ich habe -1hier verwendet , da es einfacher zu implementieren ist, selbst für ein langes Array wie

[0,2,3,1,2,9,3,6,3,9,1,0,2,9,0,1,1,2,3,4,7,9,1]

Wenn Sie nur das letzte Element entfernen möchten, möchten Sie hier nicht sitzen und die Position der letzten 9 berechnen arr.slice(0, 22). Sie können dann einfach die negative Indexlogik hier & do implementieren

arr.slice(0, -1) // same result as arr.slice(0, 22)

Ich hoffe es hilft!

palaSн
quelle
11
Dies funktioniert hervorragend. Stellen Sie jedoch sicher, dass Sie feststellen, dass dies ein Aufruf von .slice () und nicht von .s p lice () ist.
Brian Hasden
4
Es ist zu beachten, dass diese Lösung nicht das letzte Element aus dem Array entfernt arr, sondern ein neues Array zurückgibt, das dieses letzte Element ausschließt. In Mozillas Dokumenten heißt es: "Die Slice () -Methode gibt eine flache Kopie eines Teils eines Arrays in ein neues Array-Objekt zurück."
F Lekschas
4
Der Beispielcode der Frage fragt implizit, wie ein neues Array abgerufen werden soll, wobei der letzte Wert aus dem ursprünglichen Array entfernt wird. So arr.slice(0, -1)ist die beste Antwort.
Tsounabe
4
Slice ist besser, da es das ursprüngliche Array nicht ändert
user365314
66

Lernen Sie anhand eines Beispiels:

let array_1 = [1,2,3,4];
let array_2 = [1,2,3,4];
let array_3 = [1,2,3,4];

array_1.splice(-1,1)  // output --> [4]      array_1 = [1,2,3]
array_2.slice(0,-1);  // output --> [1,2,3]  array_2 = [1,2,3,4]
array_3.pop();        // output --> 4        array_3 = [1,2,3]
Lukas Liesis
quelle
13
Dies sollte die akzeptierte Antwort sein, da sie zeigt, was die meisten falsch machen. > Rückgabe des gewünschten Arrays ODER Mutation des Arrays nach Ihren Wünschen.
RaisingAgent
1
@RaisingAgent Danke, dass du diese Dinge bemerkt hast :)
Lukas Liesis
43

Sie müssten dies tun, da slicedas ursprüngliche Array nicht geändert wird.

arr = arr.slice(-1);

Wenn Sie das ursprüngliche Array ändern möchten, können Sie Folgendes verwenden splice:

arr.splice(-1, 1);

oder pop:

arr.pop();
Bill Criswell
quelle
22

Ich würde es als .pop()die 'richtigste' Lösung betrachten, aber manchmal funktioniert es möglicherweise nicht, da Sie ein Array ohne das letzte Element genau dort verwenden müssen ...

In einem solchen Fall möchten Sie möglicherweise Folgendes verwenden, es wird zurückgegeben [1,2,3]

var arr = [1,2,3,4];
console.log(arr.splice(0,arr.length-1));

während .pop()würde zurückkehren 4:

var arr = [1,2,3,4];
console.log(arr.pop());

was vielleicht nicht wünschenswert ist ...

Hoffe das spart dir etwas Zeit.

Matas Vaitkevicius
quelle
1
Danke Alter, das ist genau das Beispiel, das ich verwenden muss. Ich weiß das zu schätzen :)
Barry Michael Doyle
2
Dies ist die richtigste Antwort. Es ist eine Schande, dass andere höher eingestuft haben.
mmla
18

Dafür gibt es eine Funktion, Erklärung hier :

arr.pop();
JoDev
quelle
12

Sie könnten einfach verwenden, arr.pop()

Dadurch wird der letzte Eintrag des Arrays entfernt.

var arr = [1,0,2]; 
var popped = arr.pop();//Now arr = [1,0] & popped = 2
Krishna
quelle
8

Verwenden Sie einfach Folgendes für Ihren Anwendungsfall:

var arr = [1,2,3,4];
arr.pop() //returns 4 as the value
arr // value 4 is removed from the **arr** array variable

Nur eine Notiz. Wenn Sie die pop()Funktion ausführen , obwohl die Zeile das geknallte Element zurückgibt, wird das ursprüngliche Array ausgeführt und das geknallte Element entfernt.

Wannes
quelle
7

Sie können dies auf zwei Arten tun splice():

  1. arr.splice(-1,1)
  2. arr.splice(arr.length-1,1)

splice(position_to_start_deleting, how_many_data_to_delete) nimmt zwei Parameter.

position_to_start_deleting: Der auf Null basierende Index, von dem aus das Löschen beginnen soll. how_many_data_to_delete: Aus dem angegebenen Index, wie viele aufeinanderfolgende Daten gelöscht werden sollen.

Sie können auch das letzte Element mit entfernen , pop()wie pop()entfernt von einem Array das letzte Element.
Verwendenarr.pop()

Harunur Rashid
quelle
6

arr.slice(-1)wird eine Kopie zurückgeben des letzten Elements des Arrays zurück, lässt jedoch das ursprüngliche Array unverändert.

nVerwenden Sie, um die letzten Elemente aus einem Array zu entfernenarr.splice(-n) Sie (beachten Sie das "p" in "splice"). Der Rückgabewert ist ein neues Array, das die entfernten Elemente enthält.

Noch einfacher, für den n == 1Gebrauchval = arr.pop()

Alnitak
quelle
5
var arr = [1,0,2];
arr.length--; 

// entfernt das letzte Element // muss überprüft werden, ob arr.length> 0 ist

Nirav Shah
quelle
5

Diese Methode ist hilfreicher, um das letzte Element eines Arrays zu löschen und zu speichern.

var sampleArray = [1,2,3,4];// Declaring the array
var lastElement = sampleArray.pop();//this command will remove the last element of `sampleArray` and stores in a variable called `lastElement` so that you can use it if required.

Jetzt sind die Ergebnisse:

console.log(sampleArray); //This will give you [1,2,3]
console.log(lastElement); //this will give you 4
razat naik
quelle
Wie unterscheidet sich diese Antwort von dieser Antwort ?
mpaskov
Ja, das stimmt, aber dieser ist ausführlicher. Ihre Antwort ist für einen Anfänger schwer zu verstehen.
Razat Naik
3

Spleiß (Index, wie viele) - Diese Lösung klingt gut. Diese Anleitung funktioniert jedoch nur für den positiven Array-Index. Verwenden Sie den Index selbst, um die letzten zwei oder drei Elemente zu entfernen.

Spleißen Sie beispielsweise (-2), um die letzten beiden Elemente zu entfernen. Spleiß (-3) zum Entfernen der letzten drei Elemente.

Parthyz
quelle
3

Es ist erwähnenswert , dass die Feststellung slicewird sowohl ein Rückkehr neues Array, während .pop()und .splice()das mutiert bestehendes Array.

Wenn Sie gerne Datensammlungen mit einem verketteten Befehlsstil verarbeiten, sollten Sie sich wirklich an sliceso etwas halten.

Zum Beispiel:

myArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

var newArrayOfThings = myArray
  .filter(x => x > 5)              // only bigly things
  .slice(-1)                       // get rid of the last item
  .map(x => `The number is: ${x}`);// map to a set of strings

Es kann viel mehr Flickschusterei erfordern, und variable Management, die gleiche Art der Sache zu tun mit „Pop“, da im Gegensatz zu map, filterusw, bekommt man nicht ein neues Array zurück.

Es ist dasselbe, bei pushdem ein Element am Ende eines Arrays hinzugefügt wird. Sie könnten besser dran sein, concatda Sie so den Fluss am Laufen halten können.

myArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

var newArrayOfThings = myArray
  .filter(x => x > 5)              // only bigly things
  .slice(-1)                       // get rid of the "10"
  .concat([100])                   // note with concat, you must pass an array
  .map(x => `The number is: ${x}`) // map to a set of strings
  

pete otaqui
quelle
3

Mit Lodash können Sie dropRight verwenden , wenn Sie nicht wissen möchten , welche Elemente entfernt wurden:

_.dropRight([1, 2, 3])
// => [1, 2]

_.dropRight([1, 2, 3], 2);
// => [1]
Tomas Buteler
quelle
3
var a = [1,2,3,4,5,6]; 
console.log(a.reverse().slice(1).reverse());
//Array(5) [ 1, 2, 3, 4, 5 ]
Daphoque
quelle
Während dieser Code die Frage möglicherweise beantwortet, würde die Bereitstellung eines zusätzlichen Kontexts darüber, wie und / oder warum das Problem gelöst wird, den langfristigen Wert der Antwort verbessern.
Vasilisa
3

2019 ECMA5-Lösung:

const new_arr = arr.reduce((d, i, idx, l) => idx < l.length - 1 ? [...d, i] : d, [])

Zerstörungsfrei, generisch, einzeilig und erfordert nur ein Kopieren und Einfügen am Ende Ihres Arrays.

Santiago M. Quintero
quelle
1
"Zerstörungsfrei" klingt nicht nach dem, was die ursprüngliche Frage will : I would like to remove the last element . Dies erfordert eine destruktive / mutierende Operation am ursprünglichen Array.
Ben Hull
2

sag du hast var arr = [1,0,2]

arr.splice(-1,1)wird zu dir zurückkehren, array [1,0];während arr.slice(-1,1)zu dir zurückkehren wirdarray [2];

Anja Ishmukhametova
quelle
1

Dies ist ein guter Weg, um das letzte Element zu entfernen:

if (arr != null && arr != undefined && arr.length > 0) {
      arr.splice(arr.length - 1, 1);
}

Detail des Spleißes wie folgt:

Spleiß (startIndex, Anzahl der Spleiße)

Jainish Jariwala
quelle
1
var stack = [1,2,3,4,5,6];

stack.reverse().shift();

stack.push(0);

Die Ausgabe lautet : Array [0,1,2,3,4,5] . Auf diese Weise können Sie die gleiche Anzahl von Array-Elementen beibehalten, während Sie einen neuen Wert eingeben.

Blackspade
quelle
Sie brauchen einen weiteren Rückwärtsgang nach Ihrer Schicht oder nach Ihrem Push, um wieder die richtige Reihenfolge zu erhalten
Cyptus
Reverse kehrt das ursprüngliche Array um. Hat mich erwischt ... sagen wir ein oder zwei Mal ...
Simon_Weaver
1

Ein anderer Ansatz besteht darin, basierend auf dem Index zu filtern:

arr.filter((element, index) => index < arr.length - 1);

Hinweis: filter()Erstellt ein neues Array und ändert das vorhandene nicht.

Elnoor
quelle
0

Wenn Sie n Elemente in Javascript vom Ende des Arrays entfernen möchten, können Sie einfach Folgendes verwenden:

arr.splice(-n, n);
efirat
quelle