Usuń ostatni element z tablicy

Mam następującą tablicę.

var arr = [1,0,2];

Chciałbym usunąć ostatni element tj. 2.

Użyłem arr.slice(-1); ale to nie usuwa wartości.

Author: modiX, 2013-10-23

18 answers

Use splice(index,howmany)

arr.splice(-1,1)
 357
Author: Anton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-23 14:25:42
let fruit = ['apple', 'orange', 'banana', 'tomato'];
let popped = fruit.pop();

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

Dokumentacja tablicy.prototyp.pop na MDN

 384
Author: Stuart Kershaw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-08 16:12:20

Możesz to zrobić za pomocą .slice() metoda jak:

arr.slice(0, -1);    // returns [1,0]
Oto 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>

Zamiast robić :

arr.slice(-1);   // returns [2]
Oto 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>

Wyjaśnienie:-

Teraz podstawowa składnia metody Array.prototype.slice() lub w skrócie slice() to:

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

Tutaj,

Parametr begin jest indeksem bazującym na 0, od którego rozpoczyna się ekstrakcja z tablicy. Tak więc, powiedzmy na podstawie powyższy przykład jeśli zrobimy coś w rodzaju

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

Zwróci wszystkie elementy tablicy od początku sekwencji z pozycji 0, czyli [1,0,2]. Podobnie, jeśli zrobimy

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

Zwróci [0,2] ponieważ 0 jest na pozycji 1 tutaj i wszystko po tym. W Twoim przypadku przekazałeś indeks ujemny, tj. -1 jako parametr begin, który wskazuje przesunięcie od końca sekwencji. Więc slice(-1) w Twoim przypadku wyciąga ostatni element tablicy w sekwencji i to jest 2 (Jak już widzieliśmy w powyższym demo ).

Porozmawiajmy teraz o parametrze end w składni metody slice(). Jest to ponownie indeks bazujący na 0, na którym kończy się ekstrakcja z tablicy. Tak więc, powiedzmy, że mamy tablicę w stylu: -

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

I chcemy uzyskać tylko 2,5,3 elementy w tablicy. Pozycja 2 Od początku sekwencji to 2, A Dla ostatniego elementu {[29] } to 4. Musimy zakończyć wydobycie tutaj a Pozycja 5, ponieważ musimy dostać element przed tą pozycją. Tak więc po prostu zaimplementujemy tutaj metodę slice() Jak

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

W Twoim przypadku zaimplementowaliśmy -1 jako parametr końcowy, więc nasz kod wygląda tak:

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

Jako indeks ujemny, end wskazuje przesunięcie od końca sekwencji. Tak więc slice(0,-1) wyciąga pierwszy element przez przedostatni element w sekwencji. Otrzymujemy więc pożądaną wydajność. Możemy również zrobić jak

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

Otrzymamy to samo wyjście. Ale użyłem -1 tutaj jako łatwiejsze do zaimplementowania nawet dla długiej tablicy, takiej jak

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

Jeśli chcesz usunąć ostatni element, nie chcesz siedzieć i obliczać pozycji ostatnich 9 tutaj i zrobić jak arr.slice(0, 22). Następnie możesz po prostu zaimplementować logikę indeksu ujemnego tutaj & do

arr.slice(0, -1) // same result as arr.slice(0, 22)
Mam nadzieję, że to pomoże!
 178
Author: palaѕн,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-21 07:22:52

Musiałbyś to zrobić, ponieważ slice nie zmienia oryginalnej tablicy.

arr = arr.slice(-1);

Jeśli chcesz zmienić oryginalną tablicę możesz użyć splice:

arr.splice(-1, 1);

Lub pop:

arr.pop();
 29
Author: Bill Criswell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-23 14:30:41

Dowiedz się na przykładzie:

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]
 29
Author: Lukas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-30 13:14:08

Istnieje na to funkcja, Wyjaśnienie Tutaj :

arr.pop();
 17
Author: JoDev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-23 15:06:17

Możesz po prostu użyć, arr.pop()

Usuwa ostatni wpis tablicy.

var arr = [1,0,2]; 
var popped = arr.pop();//Now arr = [1,0] & popped = 2
 12
Author: Krishna,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-23 14:26:38

arr.slice(-1) zwraca kopię ostatniego elementu tablicy, ale pozostawia oryginalną tablicę niezmodyfikowaną.

Aby usunąć ostatnie n elementy z tablicy, użyj arr.splice(-n) (zwróć uwagę na "p" w "splice"). Zwracaną wartością będzie nowa tablica zawierająca usunięte elementy.

Prostsze, dla n == 1, Użyj val = arr.pop()

 5
Author: Alnitak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-23 14:28:39
var arr = [1,0,2];
arr.length--; 

// usuwa ostatni element // trzeba sprawdzić, czy arr.Długość > 0

 5
Author: Nirav Shah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-02 06:35:34

Ta metoda jest bardziej pomocna w usuwaniu i przechowywaniu ostatniego elementu / align = "left" /

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.

Teraz wyniki są:

console.log(sampleArray); //This will give you [1,2,3]
console.log(lastElement); //this will give you 4
 5
Author: razat naik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-15 14:26:11

Uznałbym .pop() za najbardziej 'poprawne' rozwiązanie, jednak czasami może nie działać, ponieważ trzeba użyć tablicy bez ostatniego elementu...

W takim przypadku możesz użyć następującego

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

While .pop() zwróci to (4):

var arr = [1,2,3,4];
console.log(arr.pop());
Co może nie być pożądane... Mam nadzieję, że zaoszczędzisz trochę czasu.
 4
Author: Matas Vaitkevicius,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-26 05:18:18

Splice (index,howmany) - To rozwiązanie brzmi dobrze. Ale to howmany będzie działać tylko dla dodatniego indeksu tablicy. Aby usunąć ostatnie dwa lub trzy elementy, użyj samego indeksu.

Na przykład, splice(-2), aby usunąć ostatnie dwa elementy. splice (-3) do usuwania ostatnich trzech elementów.

 3
Author: Parthyz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-27 05:54:11

Warto zauważyć, że slicezwróci nową tablicę, podczas gdy .pop() i .splice()zmutują istniejącą tablicę.

Jeśli lubisz obsługiwać zbiory danych za pomocą łańcuchowego stylu poleceń, naprawdę będziesz chciał trzymać się slice dla czegoś takiego.

Na przykład:

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
Może to wymagać dużo więcej bałaganu i zarządzania zmiennymi, aby zrobić to samo z "pop", ponieważ w przeciwieństwie do map, filter, etc, nie dostaniesz nowej tablicy z powrotem.

Jest to ten sam rodzaj rzeczy z push, który dodaje element na końcu tablicy. Może lepiej Ci będzie z concat, ponieważ pozwala ci to utrzymać przepływ.

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
Author: pete otaqui,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-05 13:00:50

Możesz to zrobić na dwa sposoby używając splice():

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

splice(position_to_start_deleting, how_many_data_to_delete) przyjmuje dwa parametry.

position_to_start_deleting : indeks zerowy, od którego należy rozpocząć usuwanie. how_many_data_to_delete: ze wskazanego indeksu, ile kolejnych danych należy usunąć.

Możesz również usunąć ostatni element używając pop(), ponieważ pop() usuwa ostatni element z tablicy.
Użyj arr.pop()

 3
Author: Harunur Rashid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-30 08:51:16

Powiedz, że masz var arr = [1,0,2]

arr.splice(-1,1) powróci do ciebie array [1,0]; podczas gdy arr.slice(-1,1) powróci do ciebie array [2];

 2
Author: miukki,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-14 04:19:06

Jest to dobry sposób na usunięcie ostatniego elementu:

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

Szczegóły splotu w następujący sposób:

splice (startIndex, liczba splice)

 1
Author: Jainish Jariwala,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-12 08:51:43
var stack = [1,2,3,4,5,6];

stack.reverse().shift();

stack.push(0);

Wyjście będzie: Array[0,1,2,3,4,5] . Pozwoli to zachować taką samą ilość elementów tablicy, w jakiej wprowadzana jest nowa wartość.

 1
Author: Blackspade,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-20 01:21:54

Z Lodash możesz użyć dropRight , Jeśli nie chcesz wiedzieć, które elementy zostały usunięte:

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

_.dropRight([1, 2, 3], 2);
// => [1]
 1
Author: Tomas Buteler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-27 05:48:17