Hapus item terakhir dari array


441

Saya memiliki array berikut.

var arr = [1,0,2];

Saya ingin menghapus elemen terakhir yaitu 2.

Saya menggunakan arr.slice(-1);tetapi tidak menghapus nilai.




3
arr.splice (-1,1) akan kembali ke Anda array [1,0]; arr.slice (-1,1) akan kembali kepada Anda [2]
Anja Ishmukhametova

10
arr.slice(0,-1)adalah solusi terbaik bagi saya
Black Mamba

3
Pertanyaannya agak ambigu karena "hapus elemen terakhir" mungkin berarti menghapus elemen dari array dan mempertahankan array (dengan satu elemen lebih sedikit). Tapi itu mungkin juga berarti menghapus elemen dan mempertahankan elemen. Kasus pertama: splice(), kasus kedua: pop().
thoni56

Jawaban:


517

Gunakan sambungan (indeks, berapa banyak)

arr.splice(-1,1)

1
@ PrithvirajMitra Anda ingin menghapus 1 dan 0? Jadi array == [2]?
Anton

3
Tidak berfungsi untuk array satu elemen: [1].splice(-1, 1)=>[1]
Tvaroh

135
ini BUKAN solusi terbaik, Terbaik adalah fungsi pop. Bukan ini.
Tommix

6
Pop sendiri hanya akan mengembalikan nilai elemen terakhir. Jika saya mengerti dengan benar, @PrithvirajMitra ingin dua hal: 1) Untuk menghapus elemen terakhir dari array asli, dan 2) mengembalikan elemen itu sebagai array elemen tunggal - yaitu:, [0,1,2] -> [2]meninggalkan [0,1]. Jika itu masalahnya, maka [arr.pop()]akan melakukan trik.
Ben Hull

11
Perhatikan bahwa array.pop()perubahan akan diubah array, sementara slice(0, -1)tidak. Pop tentu saja lebih cepat tetapi mungkin tidak selalu cocok untuk semua kebutuhan.
adelriosantiago

621

Array.prototype.pop () oleh konvensi 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 () tampaknya menjadi jsperf.com/slice-vs-splice-vs-pop/3
Daniel

1
Saat menggunakan pop (), pastikan untuk tidak melakukan jQuery ('# foo'). Val (numbers.pop ()), kecuali Anda hanya ingin menempatkan item terakhir dari array ke dalam bidang. pop () mengembalikan elemen yang dihapus. Seperti yang dilakukan Stuart, pertama lakukan number.pop (); dan kemudian lakukan jQuery ('# foo'). val (angka) ...
Charles Robertson

4
Solusi terbaik +1
mdlars

2
akan lebih baik memiliki unpop () yang mengembalikan sisa array.
eomeroff

2
Adakah cara untuk melakukan ini sambil menjaga agar array tidak berubah?
nayiaw

263

Anda dapat melakukan ini menggunakan .slice()metode seperti:

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

Ini 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>

alih-alih melakukan:

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

Ini 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>

Penjelasan:-

Sekarang sintaks dasar Array.prototype.slice()atau dalam slice()metode singkat adalah:

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

Sini,

yang beginparameter adalah nol berbasis indeks di mana ekstraksi dari array dimulai. Jadi, katakanlah berdasarkan contoh di atas jika kita melakukan sesuatu seperti

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

itu akan mengembalikan semua elemen array dari awal urutan dari posisi 0 dan itu [1,0,2]. Demikian pula halnya jika kita melakukannya

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

itu akan kembali [0,2]karena 0 ada di posisi 1 di sini dan semuanya setelah itu. Sekarang, dalam kasus Anda, Anda telah melewati indeks negatif yaitu, -1sebagai parameter awal, yang menunjukkan offset dari akhir urutan. Jadi, slice(-1)dalam kasus Anda mengekstrak elemen array yang terakhir dalam urutan dan itu adalah 2( seperti yang telah kita lihat di demo di atas ).

Sekarang, mari kita bicara tentang endparameter dalam slice()sintaksis metode di sini. Sekali lagi ini adalah indeks berbasis nol di mana ekstraksi dari array berakhir. Jadi, katakanlah kita memiliki array seperti: -

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

dan kami hanya ingin mendapatkan 2,5,3elemen dalam array. Sekarang, posisi 2dari mulai urutan adalah 2dan untuk elemen terakhir 3itu 4. Kita perlu mengakhiri ekstraksi di sini posisi 5, karena kita perlu mendapatkan elemen sebelum posisi itu. Jadi, kami hanya akan mengimplementasikan slice()metode seperti di sini

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

Dalam kasus Anda, kami telah menerapkan -1sebagai parameter akhir, jadi kode kami seperti

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

Sebagai indeks negatif, endmenunjukkan offset dari akhir urutan. Jadi, slice(0,-1)ekstrak elemen pertama melalui elemen kedua hingga terakhir dalam urutan. Jadi, kami mendapatkan output yang diinginkan. Kita juga bisa suka

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

kita akan mendapatkan output yang sama. Tapi, saya telah menggunakan di -1sini sebagai lebih mudah diimplementasikan bahkan untuk array yang panjang seperti

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

Jika Anda hanya ingin menghapus elemen terakhir, Anda tidak ingin duduk & menghitung posisi 9 terakhir di sini dan yang suka arr.slice(0, 22). Anda kemudian dapat menerapkan logika indeks negatif di sini & lakukan

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

Semoga ini bisa membantu!


11
Ini karya besar, hanya pastikan Anda melihat bahwa ini adalah panggilan untuk .slice () dan tidak .s p kutu ().
Brian Hasden

4
Perlu dicatat bahwa solusi ini tidak menghapus item terakhir dari array arrtetapi mengembalikan array baru yang mengecualikan item terakhir. Seperti yang dikatakan dokumen Mozilla: "Metode slice () mengembalikan salinan dangkal dari sebagian array ke objek array baru.".
F Lekschas

4
Kode sampel pertanyaan secara implisit bertanya bagaimana cara mendapatkan array baru dengan nilai terakhir dihapus dari array asli. Jadi arr.slice(0, -1)adalah jawaban terbaik.
Tsounabe

4
slice lebih baik karena tidak memodifikasi array asli
user365314

66

belajar dengan contoh:

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
Ini harus menjadi jawaban yang diterima karena menggambarkan apa yang paling salah. > Mengembalikan array yang Anda inginkan ATAU mengubah array seperti yang Anda inginkan.
RaisingAgent

1
@RaisingAgent Terima kasih telah memperhatikan hal-hal ini :)
Lukas Liesis

43

Anda perlu melakukan ini karena slicetidak mengubah array asli.

arr = arr.slice(-1);

Jika Anda ingin mengubah array asli, Anda dapat menggunakan splice:

arr.splice(-1, 1);

atau pop:

arr.pop();

22

Saya akan mempertimbangkan .pop()untuk menjadi solusi yang paling 'benar', namun, kadang-kadang mungkin tidak berfungsi karena Anda perlu menggunakan array tanpa elemen terakhir di sana ...

Dalam hal ini Anda mungkin ingin menggunakan yang berikut, itu akan kembali [1,2,3]

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

sementara .pop()akan kembali 4:

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

yang mungkin tidak diinginkan ...

Semoga ini menghemat waktu Anda.


1
Terima kasih Bung, ini adalah contoh tepat yang harus saya gunakan. Saya menghargai itu :)
Barry Michael Doyle

2
Ini jawaban yang paling benar. Sayang sekali peringkat orang lain lebih tinggi.
mmla


12

Anda bisa menggunakan, arr.pop()

Ini menghapus entri terakhir dari array.

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

8

Cukup gunakan yang berikut ini untuk kasus penggunaan Anda:

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

Hanya sebuah catatan. Ketika Anda menjalankan pop()fungsi meskipun baris mengembalikan item muncul, array asli dipengaruhi dan elemen muncul dihapus.


7

Anda dapat melakukannya dengan dua cara menggunakan splice():

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

splice(position_to_start_deleting, how_many_data_to_delete) membutuhkan dua parameter.

position_to_start_deleting: Indeks berbasis nol dari mana akan mulai dihapus. how_many_data_to_delete: Dari indeks yang ditunjukkan, berapa banyak data berturut-turut harus dihapus.

Anda juga dapat menghapus elemen terakhir menggunakan pop()sebagai pop()menghapus elemen terakhir dari beberapa array.
Menggunakanarr.pop()


6

arr.slice(-1)akan mengembalikan salinan elemen terakhir array, tetapi membiarkan array asli tidak dimodifikasi.

Untuk menghapus yang terakhir n elemen dari array, gunakan arr.splice(-n)(perhatikan "p" dalam "splice"). Nilai kembali akan menjadi array baru yang mengandung elemen yang dihapus.

Lebih sederhana lagi, untuk n == 1, gunakanval = arr.pop()


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

// menghapus elemen terakhir // perlu memeriksa apakah arr.length> 0


5

Metode ini lebih membantu untuk menghapus dan menyimpan elemen terakhir dari sebuah array.

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.

Sekarang hasilnya adalah:

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

Apa bedanya dengan jawaban ini ?
mpaskov

Ya itu benar tetapi yang ini lebih rumit. Jawaban Anda sulit dipahami oleh pemula.
razat naik

4

Perlu dicatat bahwa slicekeduanya akan mengembalikan array baru , sedangkan .pop()dan .splice()akan mengubah yang sudah ada array yang .

Jika Anda suka menangani koleksi data dengan gaya perintah dirantai, Anda pasti ingin tetap menggunakannya slice sesuatu seperti ini.

Sebagai contoh:

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

Mungkin memerlukan lebih banyak kekacauan, dan manajemen variabel, untuk melakukan hal yang sama dengan "pop", karena tidak seperti map,filter , dll, Anda tidak mendapatkan kembali array baru.

Ini adalah hal yang sama push, yang menambahkan item ke akhir array. Anda mungkin lebih baik concatkarena hal itu membuat Anda terus berjalan.

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) - Solusi ini terdengar bagus. Tapi ini banyak sekali hanya akan bekerja untuk indeks array positif. Untuk menghapus dua item terakhir atau tiga item, gunakan indeks itu sendiri.

Misalnya, sambatan (-2) untuk menghapus dua item terakhir. sambatan (-3) untuk menghapus tiga item terakhir.


3

Dengan Lodash Anda dapat menggunakan dropRight , jika Anda tidak tahu elemen mana yang dihapus:

_.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 ]

Sementara kode ini dapat menjawab pertanyaan, memberikan konteks tambahan tentang bagaimana dan / atau mengapa memecahkan masalah akan meningkatkan nilai jangka panjang jawaban.
Vasilisa

3

2019 ECMA5 Solution:

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

Non destructive, generic, one-liner dan hanya membutuhkan copy & paste di akhir array Anda.


1
'Non merusak' tidak terdengar seperti apa yang diinginkan pertanyaan awal: I would like to remove the last element . Itu membutuhkan operasi destruktif / bermutasi pada array asli.
Ben Hull

2

katakan kamu punya var arr = [1,0,2]

arr.splice(-1,1)akan kembali kepada Anda array [1,0];sementara arr.slice(-1,1)akan kembali kepada Andaarray [2];


1

Ini cara yang baik untuk menghapus item terakhir:

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

Detail sambatan sebagai berikut:

sambatan (startIndex, jumlah sambatan)


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

stack.reverse().shift();

stack.push(0);

Output akan menjadi: Array [0,1,2,3,4,5] . Ini akan memungkinkan Anda untuk menyimpan jumlah elemen array yang sama saat Anda mendorong nilai baru.


Anda perlu pembalikan lain setelah giliran kerja atau setelah dorongan untuk mendapatkan urutan yang benar lagi
cyptus

Reverse membalikkan array asli. Telah menangkap saya ... katakanlah sekali atau dua kali ...
Simon_Weaver

1

Pendekatan lain adalah memfilter berdasarkan indeks:

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

Catatan: filter()membuat array baru, tidak mengubah yang sudah ada.


0

Jika Anda ingin menghapus item n dari ujung array di javascript, Anda dapat dengan mudah menggunakan:

arr.splice(-n, n);
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.