Mam następującą tablicę.
var arr = [1,0,2];
Chciałbym usunąć ostatni element, tj. 2.
Użyłem, arr.slice(-1);
ale nie usuwa wartości.
arr.slice(0,-1)
było dla mnie najlepszym rozwiązaniem
splice()
drugi przypadek: pop()
.
Mam następującą tablicę.
var arr = [1,0,2];
Chciałbym usunąć ostatni element, tj. 2.
Użyłem, arr.slice(-1);
ale nie usuwa wartości.
arr.slice(0,-1)
było dla mnie najlepszym rozwiązaniem
splice()
drugi przypadek: pop()
.
Odpowiedzi:
arr.splice(-1,1)
[1].splice(-1, 1)
=>[1]
[0,1,2] -> [2]
pozostawiając za sobą [0,1]
. W takim przypadku [arr.pop()]
zrobi to samo.
array.pop()
zmieni modyfikację array
, a slice(0, -1)
nie zmieni. Pop jest oczywiście szybszy, ale nie zawsze może być odpowiedni dla wszystkich potrzeb.
Array.prototype.pop () według konwencji JavaScript.
let fruit = ['apple', 'orange', 'banana', 'tomato'];
let popped = fruit.pop();
console.log(popped); // "tomato"
console.log(fruit); // ["apple", "orange", "banana"]
Możesz to zrobić przy użyciu .slice()
metody takiej 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>
Teraz podstawową składnią Array.prototype.slice()
lub w skrócie slice()
jest:
arr.slice([begin[, end]])
Tutaj,
begin
parametr zera wskaźnik na jakim wyrzutu z rozpoczęciem tablicy. Powiedzmy na podstawie powyższego przykładu, jeśli zrobimy coś takiego
arr.slice(0) // returns [1,0,2]
zwróci wszystkie elementy tablicy od początku sekwencji od pozycji 0 i to znaczy [1,0,2]
. Podobnie, jeśli to zrobimy
arr.slice(1) // returns [0,2]
powróci, [0,2]
ponieważ 0 jest tutaj na pozycji 1, a potem wszystko. Teraz w twoim przypadku minąłeś indeks ujemny, tj. -1
Jako parametr początkowy, który wskazuje przesunięcie od końca sekwencji. Tak więc, slice(-1)
w przypadku ekstraktów ostatni element tablicy w kolejności i to 2
( jak widzieliśmy już w powyższym demo ).
Teraz porozmawiajmy o end
parametrze w slice()
składni metody tutaj. Jest to ponownie indeks zerowy, przy którym kończy się ekstrakcja z tablicy. Powiedzmy, że mamy tablicę typu: -
var arr = [1, 0, 2, 5, 3, 9];
i chcemy uzyskać tylko 2,5,3
elementy z tablicy. Teraz pozycja 2
od początku sekwencji jest 2
i dla ostatniego elementu 3
jest 4
. Będziemy musieli zakończyć ekstrakcję tutaj pozycję 5, ponieważ musimy zdobyć element przed tą pozycją. Tak więc po prostu zaimplementujemy slice()
tutaj metodę jak
arr.slice(2, 5) // returns [2,5,3]
W twoim przypadku zaimplementowaliśmy -1
jako parametr końcowy, więc nasz kod jest podobny
arr.slice(0, -1) // returns [1,0]
Jako indeks ujemny end
wskazuje przesunięcie od końca sekwencji. Wyodrębnia więc slice(0,-1)
pierwszy element od drugiego do ostatniego elementu w sekwencji. Otrzymujemy więc pożądaną wydajność. Możemy również zrobić jak
arr.slice(0, 2) // returns [1,0]
otrzymamy taką samą wydajność. Ale użyłem -1
tutaj, ponieważ jest łatwiejszy do wdrożenia, nawet dla długiej tablicy
[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 po prostu usunąć ostatni element, nie chcesz usiąść i obliczyć pozycji ostatnich 9 tutaj i zrobić to arr.slice(0, 22)
. Następnie możesz po prostu zaimplementować logikę indeksu ujemnego tutaj i wykonaj
arr.slice(0, -1) // same result as arr.slice(0, 22)
Mam nadzieję, że to pomoże!
arr
ale zwraca nową tablicę, która wyklucza ten ostatni element. Jak mówią dokumenty Mozilli: „Metoda slice () zwraca płytką kopię części tablicy do nowego obiektu tablicy.”.
arr.slice(0, -1)
jest najlepsza odpowiedź.
ucz 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]
Musisz 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();
Uważam to za .pop()
najbardziej „poprawne” rozwiązanie, jednak czasami może nie działać, ponieważ musisz użyć tablicy bez ostatniego elementu ...
W takim przypadku możesz skorzystać z następujących opcji, funkcja zwróci [1,2,3]
var arr = [1,2,3,4];
console.log(arr.splice(0,arr.length-1));
podczas gdy .pop()
wróci 4
:
var arr = [1,2,3,4];
console.log(arr.pop());
co może być niepożądane ...
Mam nadzieję, że to pozwoli Ci zaoszczędzić trochę czasu.
Po prostu skorzystaj z następujących opcji dla swojego przypadku użycia:
var arr = [1,2,3,4];
arr.pop() //returns 4 as the value
arr // value 4 is removed from the **arr** array variable
Tylko uwaga. Gdy wykonasz pop()
funkcję, mimo że linia zwraca wyskakujący element, zachowana jest oryginalna tablica i usuwany jest wyskakujący element.
Możesz to zrobić na dwa sposoby, używając splice()
:
arr.splice(-1,1)
arr.splice(arr.length-1,1)
splice(position_to_start_deleting, how_many_data_to_delete)
przyjmuje dwa parametry.
position_to_start_deleting
: Indeks liczony od zera, od którego zacząć usuwanie.
how_many_data_to_delete
: Ze wskazanego indeksu, ile kolejnych danych należy usunąć.
Możesz także usunąć ostatni element, używając pop()
as pop()
usuwa ostatni element z jakiejś tablicy.
Posługiwać sięarr.pop()
arr.slice(-1)
zwróci kopię ostatniego elementu tablicy, ale pozostawi oryginalną tablicę niezmodyfikowaną.
Aby usunąć ostatnie n
elementy z tablicy, użyjarr.splice(-n)
(zwróć uwagę na „p” w „splice”). Zwrócona wartość będzie nową tablicą zawierającą usunięte elementy.
Jeszcze prostsze w n == 1
użyciuval = arr.pop()
var arr = [1,0,2];
arr.length--;
// usuwa ostatni element // trzeba sprawdzić, czy arr. długość> 0
Ta metoda jest bardziej przydatna do usuwania i przechowywania ostatniego elementu tablicy.
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ą następujące:
console.log(sampleArray); //This will give you [1,2,3]
console.log(lastElement); //this will give you 4
Warto zauważyć, że slice
zarówno zwróci nową tablicę, jak .pop()
i .splice()
zmutuje istniejącą tablicę.
Jeśli lubisz obsługiwać kolekcje danych w stylu łańcucha poleceń, naprawdę będziesz chciał się trzymać slice
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
To może wymagać dużo bardziej ingerować i zmienną zarządzania, do tego samego rodzaju rzeczy z „pop”, ponieważ w przeciwieństwie do map
,filter
itp, nie dostaniesz nową tablicę plecy.
Jest to ten sam rodzaj rzeczy push
, który dodaje element na końcu tablicy. Lepiej może być, concat
ponieważ pozwala to utrzymać płynność.
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
splice (index, howmany) - To rozwiązanie brzmi dobrze. Ale to howmany będzie działać tylko dla pozytywnego indeksu tablicy. Aby usunąć ostatnie dwa lub trzy elementy, użyj samego indeksu.
Na przykład połącz (-2), aby usunąć ostatnie dwa elementy. łączenie (-3) do usuwania ostatnich trzech przedmiotów.
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]
var a = [1,2,3,4,5,6];
console.log(a.reverse().slice(1).reverse());
//Array(5) [ 1, 2, 3, 4, 5 ]
Rozwiązanie ECMA5 2019:
const new_arr = arr.reduce((d, i, idx, l) => idx < l.length - 1 ? [...d, i] : d, [])
Nieniszczący, ogólny, jednowarstwowy i wymaga tylko kopiowania i wklejania na końcu tablicy.
I would like to remove the last element
. To wymaga niszczącej / mutującej operacji na oryginalnej tablicy.
powiedz, że masz var arr = [1,0,2]
arr.splice(-1,1)
wróci do ciebie, array [1,0];
a arr.slice(-1,1)
wróci do ciebiearray [2];
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, jak następuje:
splice (startIndex, liczba splice)
var stack = [1,2,3,4,5,6];
stack.reverse().shift();
stack.push(0);
Dane wyjściowe to: Array [0,1,2,3,4,5] . Pozwoli ci to zachować taką samą liczbę elementów tablicy, jak wpychasz nową wartość.