Supprimer le dernier élément du tableau


441

J'ai le tableau suivant.

var arr = [1,0,2];

Je voudrais supprimer le dernier élément c'est-à-dire 2.

J'ai utilisé arr.slice(-1);mais cela ne supprime pas la valeur.




3
arr.splice (-1,1) retournera à votre tableau [1,0]; arr.slice (-1,1) vous reviendra [2]
Anja Ishmukhametova

10
arr.slice(0,-1)était la meilleure solution pour moi
Black Mamba

3
La question est un peu ambiguë car "supprimer le dernier élément" peut signifier supprimer l'élément du tableau et conserver le tableau (avec un élément de moins). Mais cela peut également signifier de supprimer l'élément et de le conserver. Premier cas: splice()deuxième cas: pop().
thoni56

Réponses:


517

Utiliser une épissure (index, combien)

arr.splice(-1,1)

1
@PrithvirajMitra Vous souhaitez supprimer 1 et 0? Donc, le tableau == [2]?
Anton

3
Ne fonctionne pas pour les tableaux à un élément: [1].splice(-1, 1)=>[1]
Tvaroh

135
ce n'est PAS la meilleure solution, la meilleure est la fonction pop. Pas ça.
Tommix

6
Pop seul ne renverra que la valeur du dernier élément. Si je comprends bien, @PrithvirajMitra veut deux choses: 1) Supprimer le dernier élément du tableau d'origine, et 2) renvoyer cet élément comme un seul tableau d'éléments - c'est-à-dire: [0,1,2] -> [2]laisser derrière [0,1]. Si tel est le cas, alors [arr.pop()]fera l'affaire.
Ben Hull

11
Notez que array.pop()changera modifier array, tandis que slice(0, -1)non. La pop est bien sûr plus rapide mais peut ne pas toujours convenir à tous les besoins.
adelriosantiago

621

Array.prototype.pop () par convention JavaScript.

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

console.log(popped); // "tomato"
console.log(fruit); // ["apple", "orange", "banana"]

7
Array.prototype.pop () semble être le plus rapide jsperf.com/slice-vs-splice-vs-pop/3
Daniel

1
Lorsque vous utilisez pop (), assurez-vous de ne pas faire jQuery ('# foo'). Val (numbers.pop ()), sauf si vous ne souhaitez placer que le dernier élément du tableau dans le champ. pop () renvoie l'élément supprimé. Comme l'a fait Stuart, faites d'abord number.pop (); puis faire jQuery ('# foo'). val (nombres) ...
Charles Robertson

4
Meilleure solution +1
mdlars

2
ce serait cool d'avoir unpop () qui retourne le reste du tableau.
eomeroff

2
Est-il possible de le faire tout en conservant le tableau immuable?
nayiaw

263

Vous pouvez le faire en utilisant une .slice()méthode comme:

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

Voici une démo:

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>

au lieu de faire:

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

Voici une démo:

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>

Explication:-

Maintenant, la syntaxe de base de Array.prototype.slice()ou en bref slice()est la suivante:

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

Ici,

le beginparamètre est un index de base zéro à partir duquel l'extraction à partir d'un tableau commence. Donc, disons sur la base de l'exemple ci-dessus si nous faisons quelque chose comme

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

il retournerait tous les éléments du tableau depuis le début de la séquence depuis la position 0 et c'est-à-dire [1,0,2]. De même, si nous faisons

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

il reviendrait [0,2]puisque 0 est à la position 1 ici et tout ce qui suit. Maintenant, dans votre cas, vous avez passé un indice négatif, c'est-à-dire -1comme paramètre de début, qui indique un décalage à partir de la fin de la séquence. Donc, slice(-1)dans votre cas, extrait le dernier élément de tableau de la séquence et c'est 2( comme nous l'avons déjà vu dans la démonstration ci-dessus ).

Maintenant, parlons du endparamètre dans la slice()syntaxe de la méthode ici. Il s'agit à nouveau d'un index de base zéro auquel se termine l'extraction à partir d'un tableau. Donc, disons que nous avons un tableau comme: -

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

et nous voulons obtenir uniquement les 2,5,3éléments du tableau. Maintenant, la position 2du début de la séquence est 2et pour le dernier élément 3c'est 4. Nous devrons terminer l'extraction ici à une position 5, car nous devons obtenir l'élément avant cette position. Donc, nous allons simplement implémenter la slice()méthode ici comme

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

Dans votre cas, nous avons implémenté -1comme paramètre final, donc notre code est comme

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

En tant qu'indice négatif, endindique un décalage par rapport à la fin de la séquence. Ainsi, slice(0,-1)extrait le premier élément à travers l'avant-dernier élément de la séquence. Ainsi, nous obtenons la sortie souhaitée. On peut aussi faire comme

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

nous obtiendrons la même sortie. Mais, j'ai utilisé -1ici comme son plus facile à implémenter même pour un long tableau comme

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

Si vous voulez simplement supprimer le dernier élément, vous ne voulez pas vous asseoir et calculer la position des 9 derniers ici et les faire comme arr.slice(0, 22). Vous pouvez ensuite simplement implémenter la logique d'index négatif ici et faire

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

J'espère que cela aide!


11
Cela fonctionne très bien, assurez-vous simplement de remarquer qu'il s'agit d'un appel à .slice () et non à .s p lice ().
Brian Hasden

4
Il convient de noter que cette solution ne supprime pas le dernier élément du tableau arrmais renvoie plutôt un nouveau tableau qui exclut ce dernier élément. Comme le disent les documents de Mozilla: "La méthode slice () renvoie une copie superficielle d'une partie d'un tableau dans un nouvel objet tableau.".
F Lekschas

4
L'exemple de code de la question demande implicitement comment obtenir un nouveau tableau avec la dernière valeur supprimée du tableau d'origine. Telle arr.slice(0, -1)est la meilleure réponse.
Tsounabe

4
la tranche est meilleure car elle ne modifie pas le tableau d'origine
user365314

66

apprendre par l'exemple:

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]

13
Cela devrait être la réponse acceptée car elle illustre ce qui se passe le plus . > Retourner le tableau que vous voulez OU muter le tableau comme vous le souhaitez.
RaisingAgent

1
@RaisingAgent Merci d'avoir remarqué ces choses :)
Lukas Liesis

43

Vous devrez le faire car slicene modifie pas le tableau d'origine.

arr = arr.slice(-1);

Si vous souhaitez modifier le tableau d'origine, vous pouvez utiliser splice:

arr.splice(-1, 1);

ou pop:

arr.pop();

22

Je considérerais .pop() la solution la plus `` correcte '', cependant, parfois, cela pourrait ne pas fonctionner car vous devez utiliser un tableau sans le dernier élément juste là ...

Dans un tel cas, vous voudrez peut-être utiliser ce qui suit, il retournera [1,2,3]

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

tandis .pop()que reviendrait 4:

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

ce qui pourrait ne pas être souhaitable ...

J'espère que cela vous fera gagner du temps.


1
Merci mec, c'est l'exemple exact que je dois utiliser. J'apprécie cela :)
Barry Michael Doyle

2
C'est la réponse la plus correcte. C'est dommage que d'autres se soient classés plus haut.
mmla

18

Il y a une fonction pour cela, explication ici :

arr.pop();

12

Vous pouvez simplement utiliser, arr.pop()

Cela supprime la dernière entrée du tableau.

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

8

Utilisez simplement ce qui suit pour votre cas d'utilisation:

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

Juste une note. Lorsque vous exécutez la pop()fonction même si la ligne renvoie l'élément sauté, le tableau d'origine est effectué et l'élément sauté est supprimé.


7

Vous pouvez le faire de deux manières en utilisant splice():

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

splice(position_to_start_deleting, how_many_data_to_delete) prend deux paramètres.

position_to_start_deleting: L'index de base zéro d'où commencer la suppression. how_many_data_to_delete: À partir de l'index indiqué, combien de données consécutives doivent être supprimées.

Vous pouvez également supprimer le dernier élément en utilisant pop()as pop()supprime le dernier élément d'un tableau.
Utilisationarr.pop()


6

arr.slice(-1)retournera une copie du dernier élément du tableau, mais ne modifie pas le tableau d'origine.

Pour supprimer les derniers néléments d'un tableau, utilisezarr.splice(-n) (notez le "p" dans "splice"). La valeur de retour sera un nouveau tableau contenant les éléments supprimés.

Encore plus simple à n == 1utiliserval = arr.pop()


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

// supprime le dernier élément // doit vérifier si arr.length> 0


5

Cette méthode est plus utile pour supprimer et stocker le dernier élément d'un tableau.

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.

Maintenant, les résultats sont les suivants:

console.log(sampleArray); //This will give you [1,2,3]
console.log(lastElement); //this will give you 4

En quoi est-ce différent de cette réponse ?
mpaskov

C'est vrai, mais celui-ci est plus élaboré. Votre réponse est difficile à comprendre pour un débutant.
razat naik

4

Il convient de noter que slicecela retournera à la fois un nouveau tableau, tandis que .pop()et .splice()mutera le tableau existant .

Si vous aimez gérer des collections de données avec un style de commande chaîné, vous voudrez vraiment vous en tenir à slice quelque chose comme ça.

Par exemple:

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

Cela peut nécessiter beaucoup plus de gâchis et de gestion des variables, pour faire le même genre de chose avec "pop", car contrairement à map,filter etc., vous ne recevez pas un nouveau retour de tableau.

C'est le même genre de chose avec push, qui ajoute un élément à la fin d'un tableau. Vous pourriez être mieux avec, concatcar cela vous permet de maintenir le flux.

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
  


3

splice (index, howmany) - Cette solution sonne bien. Mais cette howmany ne fonctionnera que pour l'indice de tableau positif. Pour supprimer les deux ou trois derniers éléments, utilisez l'index lui-même.

Par exemple, épissez (-2) pour supprimer les deux derniers éléments. épissure (-3) pour supprimer les trois derniers éléments.


3

Avec Lodash, vous pouvez utiliser dropRight , si vous ne vous souciez pas de savoir quels éléments ont été supprimés:

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

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

3
var a = [1,2,3,4,5,6]; 
console.log(a.reverse().slice(1).reverse());
//Array(5) [ 1, 2, 3, 4, 5 ]

Bien que ce code puisse répondre à la question, fournir un contexte supplémentaire concernant la manière et / ou la raison pour laquelle il résout le problème améliorerait la valeur à long terme de la réponse.
Vasilisa

3

Solution ECMA5 2019:

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

Non destructif, générique, à une ligne et ne nécessite qu'un copier-coller à la fin de votre tableau.


1
« Non destructive » ne ressemble pas à ce que la question veut originale: I would like to remove the last element . Cela nécessite une opération destructrice / mutante sur le tableau d'origine.
Ben Hull

2

dis que tu as var arr = [1,0,2]

arr.splice(-1,1)reviendra vers vous array [1,0];tout arr.slice(-1,1)reviendra vers vousarray [2];


1

C'est un bon moyen de supprimer le dernier élément:

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

Détail de l'épissure comme suit:

épissure (startIndex, nombre d'épissures)


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

stack.reverse().shift();

stack.push(0);

La sortie sera: Array [0,1,2,3,4,5] . Cela vous permettra de conserver la même quantité d'éléments de tableau que lorsque vous introduisez une nouvelle valeur.


vous avez besoin d'un autre revers après votre quart de travail ou après votre poussée pour obtenir à nouveau le bon ordre
cyptus

L'inverse inverse le tableau d'origine. M'a rattrapé ... disons une ou deux fois ...
Simon_Weaver

1

Une autre approche consiste à filtrer en fonction de l'index:

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

Remarque: filter()crée un nouveau tableau, ne change pas celui existant.


0

Si vous souhaitez supprimer n élément de la fin du tableau en javascript, vous pouvez facilement utiliser:

arr.splice(-n, n);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.