Bagaimana cara menghapus elemen dari array di JavaScript?

340
var arr = [1,2,3,5,6];

Hapus elemen pertama

Saya ingin menghapus elemen pertama dari array sehingga menjadi:

var arr = [2,3,5,6];

Hapus elemen kedua

Untuk memperluas pertanyaan ini, bagaimana jika saya ingin menghapus elemen kedua array sehingga menjadi:

var arr = [1,3,5,6];
pengguna198729
sumber
1
slice(start, end)bukan 'how_many_to_remove'
seanjacob
2
@Ped arr.unshift () tidak MENGHAPUS, tetapi "Menambahkan satu atau lebih elemen ke awal array"
psycho brm
@ seanjacob splicebukan itu slicekurasa.
Animesh Singh

Jawaban:

346

Untuk solusi yang lebih fleksibel, gunakan splice()fungsinya. Ini memungkinkan Anda untuk menghapus item apa pun dalam Array berdasarkan Nilai Indeks:

var indexToRemove = 0;
var numberToRemove = 1;

arr.splice(indexToRemove, numberToRemove);
Gabriel McAdams
sumber
12
Dan pertanyaan lanjutannya: arr.splice(1,1)untuk elemen kedua.
Slebetman
1
Saya lebih suka splice()lebih shift()karena yang lebih fleksibel. Saya mungkin ingin melakukan sesuatu yang berbeda di masa depan, dan tidak selalu saya ingin menghapus hanya satu elemen, atau bahkan elemen pertama.
Gabriel McAdams
14
Jika Anda datang ke sini dari Google: Gabriel lebih suka jawaban ini, tetapi Anda harus sadar ada juga pergeseran (), lihat jawaban Joseph.
SHernandez
668

shift()sangat ideal untuk situasi Anda. shift()menghapus elemen pertama dari array dan mengembalikan elemen itu. Metode ini mengubah panjang array.

array = [1, 2, 3, 4, 5];

array.shift(); // 1

array // [2, 3, 4, 5]
JP Silvashy
sumber
Ini berfungsi, tetapi hanya akan menghapus elemen pertama dalam array.
Gabriel McAdams
53
@ Gabriel: bukankah itu pertanyaannya? Saya lebih suka shift()untuk splice(..., ...)karena jauh lebih eksplisit, langsung.
Bruno Reis
6
Koreksi: Mengembalikan elemen pertama, bukan array baru minus elemen pertama, sesuai tautan yang Anda berikan :)
DanH
Meskipun contoh kode sudah benar, uraiannya menyesatkan: (a) seperti yang ditunjukkan oleh @DanH, itu adalah elemen pertama yang dikembalikan , dan (b) fakta bahwa array input diubah tidak dibuat jelas. Karena itu, jawaban Ped lebih unggul.
mklement0
2
shiftlebih cepat kecuali Anda menyambungkan daftar besar jsperf.com/splice-vs-shift3 dan jsperf.com/splice-vs-shift2
kcathode
61

The Array.prototype.shiftMetode menghilangkan elemen pertama dari array, dan mengembalikan itu. Ini memodifikasi array asli.

var a = [1,2,3]
// [1,2,3]
a.shift()
// 1
a
//[2,3]
p3drosola
sumber
4
Sebuah perbaikan besar pada jawaban Joseph Silvashy - tidak ada ketidakkonsistenan antara deskripsi dan kode.
mklement0
48
arr.slice(begin[,end])

tidak merusak, sambungan dan perubahan akan mengubah susunan asli Anda

kiuma
sumber
3
Ya untuk tidak bermutasi. Ini harus lebih terlihat.
pengguna
16

Menulis artikel kecil tentang menyisipkan dan menghapus elemen pada posisi sewenang-wenang di Javascript Array.

Berikut cuplikan kecil untuk menghapus elemen dari posisi apa pun. Ini memperluas kelas Array dalam Javascript dan menambahkan metode hapus (indeks).

// Remove element at the given index
Array.prototype.remove = function(index) {
    this.splice(index, 1);
}

Jadi untuk menghapus item pertama dalam contoh Anda, panggil arr.remove ():

var arr = [1,2,3,5,6];
arr.remove(0);

Untuk menghapus item kedua,

arr.remove(1);

Inilah artikel kecil dengan metode menyisipkan dan menghapus untuk kelas Array.

Pada dasarnya ini tidak berbeda dari jawaban lain yang menggunakan splice, tetapi namanya splicetidak intuitif, dan jika Anda memiliki panggilan itu di seluruh aplikasi Anda, itu hanya membuat kode lebih sulit untuk dibaca.

Anurag
sumber
14

Mungkin kira-kira seperti ini:

arr=arr.slice(1);
ThatGuyYouKnow
sumber
7

Lainnya jawaban yang besar, saya hanya ingin menambahkan solusi alternatif dengan ES6fungsi Array: filter.

filter() membuat array baru dengan elemen yang termasuk dalam kriteria yang diberikan dari array yang ada.

Jadi Anda dapat dengan mudah menggunakannya untuk menghapus item yang tidak lulus kriteria. Manfaat dari fungsi ini adalah Anda dapat menggunakannya pada array kompleks bukan hanya string dan angka.

Beberapa contoh :

Hapus elemen pertama :

// Not very useful but it works
function removeFirst(element, index) {
  return index > 0;
}
var arr = [1,2,3,5,6].filter(removeFirst); // [2,3,4,5,6]

Hapus elemen kedua :

function removeSecond(element, index) {
  return index != 1;
}
var arr = [1,2,3,5,6].filter(removeSecond); // [1,3,4,5,6]

Hapus elemen aneh :

function removeOdd(element, index) {
  return !(element % 2);
}
var arr = [1,2,3,5,6].filter(removeOdd); [2,4,6]

Hapus item yang tidak ada stok

const inventory = [
  {name: 'Apple', qty: 2},
  {name: 'Banana', qty: 0},
  {name: 'Orange', qty: 5}
];

const res = inventory.find( product => product.qty > 0);

Martin Choraine
sumber
2

Anda dapat menggunakan fitur Penugasan Destrukturisasi ES6 dengan operator lainnya. Koma menunjukkan di mana Anda ingin menghapus elemen dan operator (arr) lainnya untuk memberi Anda elemen array yang tersisa.

const source = [1,2,3,5,6];

function removeFirst(list) {
   var  [, ...arr] = list;
   return arr;
}
const arr = removeFirst(source);
console.log(arr); // [2, 3, 5, 6]
console.log(source); // [1, 2, 3, 5, 6]

Brendan
sumber
1

Array.splice()memiliki properti menarik yang tidak dapat digunakan untuk menghapus elemen pertama. Jadi, kita perlu resor

function removeAnElement( array, index ) {
    index--;

    if ( index === -1 ) {
        return array.shift();
    } else {
        return array.splice( index, 1 );
    }
}
Gabriel Schulhof
sumber
3
Array.splice (0,1) menghapus elemen pertama. Menurut setiap jawaban lain di sini, dan menurut developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… . Juga, mengapa seseorang lulus -1 untuk menghapus elemen pertama? Bukankah mereka lulus 0?
batu
@skypecakes Saya tidak bisa bicara tentang validitas sambungan pada indeks ke-0, tapi di sini indeks diturunkan sebelum cek itu, jadi itu akan 0 ketika disahkan.
Jake T.
Yup, itu pasti bisa menghapus elemen pertama. Saya mengujinya di sini: jsfiddle.net/sijpkes/d87rcLob/2
sijpkes
1

Solusi naskah yang tidak bermutasi array asli

function removeElementAtIndex<T>(input: T[], index: number) {
  return input.slice(0, index).concat(input.slice(index + 1));
}
pie6k
sumber
1

Ada beberapa cara untuk menghapus elemen dari Array. Izinkan saya menunjukkan opsi yang paling sering digunakan di bawah ini. Saya menulis jawaban ini karena saya tidak dapat menemukan alasan yang tepat mengenai apa yang harus digunakan dari semua opsi ini. Jawaban atas pertanyaan ini adalah opsi 3 ( Splice () ).

1) SHIFT () - Hapus Elemen Pertama dari Array Asli dan Kembalikan Elemen Pertama

Lihat referensi untuk Array.prototype.shift () . Gunakan ini hanya jika Anda ingin menghapus elemen pertama, dan hanya jika Anda baik-baik saja dengan mengubah array asli.

const array1 = [1, 2, 3];

const firstElement = array1.shift();

console.log(array1);
// expected output: Array [2, 3]

console.log(firstElement);
// expected output: 1

2) SLICE () - Mengembalikan Salinan Array, Dipisahkan oleh Indeks Awal dan Indeks Akhir

Lihat referensi untuk Array.prototype.slice () . Anda tidak dapat menghapus elemen tertentu dari opsi ini. Anda bisa hanya mengiris array yang ada dan mendapatkan porsi array yang berkesinambungan. Ini seperti memotong array dari indeks yang Anda tentukan. Array asli tidak terpengaruh.

const animals = ['ant', 'bison', 'camel', 'duck', 'elephant'];

console.log(animals.slice(2));
// expected output: Array ["camel", "duck", "elephant"]

console.log(animals.slice(2, 4));
// expected output: Array ["camel", "duck"]

console.log(animals.slice(1, 5));
// expected output: Array ["bison", "camel", "duck", "elephant"]

3) SPLICE () - Mengubah Isi Array dengan Menghapus atau Mengganti Elemen pada Indeks Tertentu.

Lihat referensi untuk Array.prototype.splice () . Metode splice () mengubah konten array dengan menghapus atau mengganti elemen yang ada dan / atau menambahkan elemen baru di tempatnya. Mengembalikan array yang diperbarui. Array asli diperbarui.

const months = ['Jan', 'March', 'April', 'June'];
months.splice(1, 0, 'Feb');
// inserts at index 1
console.log(months);
// expected output: Array ["Jan", "Feb", "March", "April", "June"]

months.splice(4, 1, 'May');
// replaces 1 element at index 4
console.log(months);
// expected output: Array ["Jan", "Feb", "March", "April", "May"]
Keet Sugathadasa
sumber
0

Anda juga dapat melakukan ini dengan mengurangi:

let arr = [1, 2, 3]

arr.reduce((xs, x, index) => {
        if (index == 0) {
            return xs
        } else {
            return xs.concat(x)
        }
    }, Array())

// Or if you like a oneliner
arr.reduce((xs, x, index) => index == 0 ? xs : xs.concat(x), Array())
SAYA YANG TERBAIK
sumber