Sudah banyak jawaban indah di utas ini. Namun saya ingin berbagi pengalaman ketika saya mencoba menyelesaikan "menghapus elemen ke-n dari array" dalam konteks ES5.
Array JavaScript memiliki metode berbeda untuk menambah / menghapus elemen dari awal atau akhir. Ini adalah:
arr.push(ele) - To add element(s) at the end of the array
arr.unshift(ele) - To add element(s) at the beginning of the array
arr.pop() - To remove last element from the array
arr.shift() - To remove first element from the array
Pada dasarnya tidak ada metode di atas yang dapat digunakan secara langsung untuk menghapus elemen ke-n dari array.
Fakta yang perlu dicatat adalah bahwa ini kontras dengan penggunaan java iterator yang memungkinkan untuk menghapus elemen ke-n untuk koleksi saat iterasi.
Ini pada dasarnya membuat kita hanya memiliki satu metode array Array.splice
untuk melakukan penghapusan elemen ke-n (ada hal-hal lain yang dapat Anda lakukan dengan metode ini juga, tetapi dalam konteks pertanyaan ini saya fokus pada penghapusan elemen):
Array.splice(index,1) - removes the element at the index
Berikut adalah kode yang disalin dari jawaban asli (dengan komentar):
var arr = ["one", "two", "three", "four"];
var i = arr.length; //initialize counter to array length
while (i--) //decrement counter else it would run into IndexOutBounds exception
{
if (arr[i] === "four" || arr[i] === "two") {
//splice modifies the original array
arr.splice(i, 1); //never runs into IndexOutBounds exception
console.log("Element removed. arr: ");
} else {
console.log("Element not removed. arr: ");
}
console.log(arr);
}
Metode penting lainnya adalah Array.slice
. Namun tipe pengembalian dari metode ini adalah elemen yang dihapus. Juga ini tidak mengubah array asli. Cuplikan kode yang dimodifikasi sebagai berikut:
var arr = ["one", "two", "three", "four"];
var i = arr.length; //initialize counter to array length
while (i--) //decrement counter
{
if (arr[i] === "four" || arr[i] === "two") {
console.log("Element removed. arr: ");
console.log(arr.slice(i, i + 1));
console.log("Original array: ");
console.log(arr);
}
}
Karena itu, kita masih bisa menggunakan Array.slice
untuk menghapus elemen n seperti yang ditunjukkan di bawah ini. Namun itu lebih banyak kode (karenanya tidak efisien)
var arr = ["one", "two", "three", "four"];
var i = arr.length; //initialize counter to array length
while (i--) //decrement counter
{
if (arr[i] === "four" || arr[i] === "two") {
console.log("Array after removal of ith element: ");
arr = arr.slice(0, i).concat(arr.slice(i + 1));
console.log(arr);
}
}
The Array.slice
Metode ini sangat penting untuk mencapai kekekalan dalam pemrograman fungsional à la redux