Saya sudah:
var array = new Array();
array.push("A");
array.push("B");
array.push("C");
Saya ingin dapat melakukan sesuatu seperti:
array.remove("B");
tetapi tidak ada fungsi hapus. Bagaimana saya mencapai ini?
Saya sudah:
var array = new Array();
array.push("A");
array.push("B");
array.push("C");
Saya ingin dapat melakukan sesuatu seperti:
array.remove("B");
tetapi tidak ada fungsi hapus. Bagaimana saya mencapai ini?
Jawaban:
Saya sebenarnya memperbarui utas ini dengan solusi 1-baris yang lebih baru:
let arr = ['A', 'B', 'C'];
arr = arr.filter(e => e !== 'B'); // will return ['A', 'C']
Idenya pada dasarnya adalah untuk memfilter array dengan memilih semua elemen yang berbeda untuk elemen yang ingin Anda hapus.
Catatan: akan menghapus semua kemunculan.
EDIT:
Jika Anda ingin menghapus hanya kejadian pertama:
t = ['A', 'B', 'C', 'B'];
t.splice(t.indexOf('B'), 1); // will return ['B'] and t is now equal to ['A', 'C', 'B']
Ulangi daftar dalam urutan terbalik, dan gunakan .splicemetode ini.
var array = ['A', 'B', 'C']; // Test
var search_term = 'B';
for (var i=array.length-1; i>=0; i--) {
if (array[i] === search_term) {
array.splice(i, 1);
// break; //<-- Uncomment if only the first term has to be removed
}
}
Urutan terbalik penting ketika semua kemunculan istilah pencarian harus dihapus. Jika tidak, penghitung akan meningkat, dan Anda akan melewatkan elemen.
Ketika hanya kejadian pertama yang harus dihapus, yang berikut ini juga akan berfungsi:
var index = array.indexOf(search_term); // <-- Not supported in <IE9
if (index !== -1) {
array.splice(index, 1);
}
0tidak secara otomatis lebih cepat seperti di, katakanlah, C. Selama Anda cache batas, tentu saja, yang akan menyulitkan hal-hal jika Anda terus setelah pertandingan pertama (tetapi tidak jika Anda berhenti di atasnya).
Daftar One Liners
Mari kita selesaikan masalah ini untuk array ini:
var array = ['A', 'B', 'C'];
1. Hapus hanya yang pertama: Gunakan Jika Anda yakin item itu ada
array.splice(array.indexOf('B'), 1);
2. Hapus hanya yang terakhir: Gunakan Jika Anda yakin item itu ada
array.splice(array.lastIndexOf('B'), 1);
3. Hapus semua kejadian:
array = array.filter(v => v !== 'B');
Anda harus menemukan lokasi dengan apa yang Anda cari .indexOf()kemudian menghapusnya.splice()
function remove(arr, what) {
var found = arr.indexOf(what);
while (found !== -1) {
arr.splice(found, 1);
found = arr.indexOf(what);
}
}
var array = new Array();
array.push("A");
array.push("B");
array.push("C");
remove(array, 'B');
alert(array);
Ini akan menangani semua kejadian.
Uncaught ReferenceError: array is not defined. Apa yang salah?
.indexOf()sedikit saja. Jika Anda meneruskan foundargumen kedua ke .indexOf()panggilan dalam while-loop , elemen-elemen dalam array yang sudah diperiksa dan berakhir tidak sama tidak diperiksa lagi: found = arr.indexOf(what, found);
Secara sederhana
array.splice(array.indexOf(item), 1);
-1jika tidak ada yang ditemukan dan whoops, splice akan menghapus 1 elemen dari akhir array
Solusi sederhana (ES6)
Jika Anda tidak memiliki elemen duplikat
Array.prototype.remove = function(elem) {
var indexElement = this.findIndex(el => el === elem);
if (indexElement != -1)
this.splice(indexElement, 1);
return this;
};
Anda harus menulis sendiri hapus. Anda dapat mengulang array, ambil indeks item yang ingin Anda hapus, dan gunakan spliceuntuk menghapusnya.
Atau, Anda dapat membuat array baru, mengulang array saat ini, dan jika objek saat ini tidak cocok dengan yang ingin Anda hapus, letakkan di array baru.
menggunakan:
array.splice(2, 1);
Ini menghapus satu item dari array, mulai dari indeks 2 (item ke-3)
array.splice(2,1)yang menghapus 1 item pada indeks 2 dari array. periksa https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice untuk detail lebih lanjut
gunakan array.splice
/*array.splice(index , howMany[, element1[, ...[, elementN]]])
array.splice(index) // SpiderMonkey/Firefox extension*/
array.splice(1,1)
Sumber: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice
arraydan spliceharus berupa titik.
.indexOf()dan.splice()harus melakukan trik. Atau mungkin, sebagai alternatif.filter(),.