Bagaimana cara menghapus elemen tertentu dari array di javascript?

Saya memiliki array bi>.push() untuk menambahkan elemen ke dalamnya.

Apakah ada cara mudah untuk menghapus item tertentu dari array? Setara dengan sesuatu seperti array.remove(int); ,

Saya harus menggunakan javascript dasar - tidak ada struktur yang diizinkan.

6774
24 апр. ditetapkan oleh Walker pada 24 April 2011-04-24 01:17 '11 pada 1:17 2011-04-24 01:17
@ 78 jawaban
  • 1
  • 2
  • 3

Temukan index elemen array yang ingin Anda hapus, lalu hapus indeks ini menggunakan splice .

Metode splice () mengubah konten array, menghapus elemen yang ada dan / atau menambahkan elemen baru.


Catatan : Dukungan browser untuk indexOf terbatas; ini tidak didukung di Internet Explorer 7 dan 8.

Jika Anda memerlukan indexOf di browser yang tidak didukung, coba polyfill berikut. Temukan informasi lebih lanjut tentang polyfill ini di sini .

 Array.prototype.indexOf || (Array.prototype.indexOf = function(d, e) { var a; if (null == this) throw new TypeError('"this" is null or not defined'); var c = Object(this), b = c.length >>> 0; if (0 === b) return -1; a = +e || 0; Infinity === Math.abs(a)  (a = 0); if (a >= b) return -1; for (a = Math.max(0 <= a ? a : b - Math.abs(a), 0); a < b;) { if (a in c  c[a] === d) return a; a++ } return -1 }); 
9765
24 апр. Balasan diberikan oleh Tom Wadley pada 24 April 2011-04-24 01:23 '11 pada 1:23 2011-04-24 01:23

Saya tidak tahu bagaimana Anda mengharapkan array.remove(int) akan berperilaku. Ada tiga kemungkinan yang bisa Anda pikirkan.

Untuk menghapus elemen array dengan indeks i :

 array.splice(i, 1); 

Jika Anda ingin menghapus setiap item dengan nilai number dari array:

 for(var i = array.length - 1; i >= 0; i--) { if(array[i] === number) { array.splice(i, 1); } } 

Jika Anda hanya ingin membuat elemen dengan indeks, i tidak ada lagi, tetapi Anda tidak ingin indeks elemen lain berubah:

 delete array[i]; 
990
24 апр. Balas diberikan oleh Peter Olson pada 24 April 2011-04-24 01:20 '11 pada 1:20 2011-04-24 01:20

Diedit Oktober 2016

  • Jadikan sederhana, intuitif, dan jelas ( https://en.wikipedia.org/wiki/Occam%27s_razor )
  • Jadikan tidak berubah (array sumber tetap tidak berubah)
  • Lakukan ini menggunakan fungsi JS standar, jika browser Anda tidak mendukungnya - gunakan polyfill

Dalam contoh kode ini, saya menggunakan fungsi "array.filter (...)" untuk menghapus elemen yang tidak perlu dari suatu array; fungsi ini tidak mengubah array asli dan membuat yang baru. Jika browser Anda tidak mendukung fitur ini (misalnya, IE hingga versi 9 atau Firefox hingga versi 1.5), pertimbangkan untuk menggunakan filter polyfill Mozilla .

Ekstraksi Barang (kode ECMA-262 Edition 5, juga dikenal sebagai JS gaya lama)

 var value = 3 var arr = [1, 2, 3, 4, 5, 3] arr = arr.filter(function(item) { return item !== value }) console.log(arr) // [ 1, 2, 4, 5 ] 

Menghapus item (kode ES2015)

 let value = 3 let arr = [1, 2, 3, 4, 5, 3] arr = arr.filter(item => item !== value) console.log(arr) // [ 1, 2, 4, 5 ] 

PENTING ES2015 "() => {}" Sintaks fungsi panah sama sekali tidak didukung di IE, Chrome hingga versi 45, Firefox hingga versi 22, Safari hingga versi 10. Untuk menggunakan sintaks ES2015 di browser lama, Anda dapat menggunakan BabelJS


Menghapus banyak item (kode ES2016)

Keuntungan tambahan dari metode ini adalah Anda dapat menghapus beberapa item.

 let forDeletion = [2, 3, 5] let arr = [1, 2, 3, 4, 5, 3] arr = arr.filter(item => !forDeletion.includes(item)) // !!! Read below about array.includes(...) support !!! console.log(arr) // [ 1, 4 ] 

PENTING! Fungsi "array.include (...)" sama sekali tidak didukung di IE, Chrome hingga versi 47, Firefox hingga versi 43, Safari hingga versi 9 dan Edge hingga versi 14, sehingga ada Mozilla polifil

Hapus beberapa elemen (ES2018 javascript eksperimental lanjutan?)

 // array-lib.js export function remove(...forDeletion) { return this.filter(item => !forDeletion.includes(item)) } // main.js import { remove } from './array-lib.js' let arr = [1, 2, 3, 4, 5, 3] // :: This-Binding Syntax Proposal // using "remove" function as "virtual method" // without extending Array.prototype arr = arr::remove(2, 3, 5) console.log(arr) // [ 1, 4 ] 

50 builtIns = false code = fungsi hapus (... forDeletion) {return this.filter (item =>! ForDeletion.includes (item))} biarkan arr = [1, 2, 3, 4, 5, 3] // :: Proposal Sintaks yang Mengikat Ini // menggunakan fungsi remove sebagai "metode virtual" arr = arr :: remove (2, 3, 5) console.log (arr) // [1, 4] rel = noreferrer> Coba sendiri di BabelJS: )

Referensi

814
19 дек. Jawabannya diberikan oleh Ujeenator pada 19 Desember. 2013-12-19 22:54 '13 pada 10:54 2013-12-19 22:54

Itu tergantung pada apakah Anda ingin meninggalkan ruang kosong atau tidak.

Jika Anda membutuhkan slot kosong, penghapusan dimungkinkan:

 delete array[ index ]; 

Jika Anda tidak melakukan ini, Anda harus menggunakan metode sambatan :

 array.splice( index, 1 ); 

Dan jika Anda membutuhkan nilai elemen ini, Anda bisa menyimpan elemen yang dikembalikan dari array:

 var value = array.splice( index, 1 )[0]; 

Jika Anda ingin melakukan ini dalam urutan tertentu, Anda dapat menggunakan array.pop() untuk yang terakhir atau array.shift() untuk yang pertama (dan keduanya mengembalikan nilai elemen juga).

Dan jika Anda tidak tahu indeks suatu item, Anda bisa menggunakan array.indexOf( item ) untuk mendapatkannya (in if() untuk mendapatkan satu item, atau di while() untuk mendapatkan semuanya). array.indexOf( item ) mengembalikan indeks atau -1 jika tidak ditemukan.

381
24 апр. jawaban diberikan xavierm02 24 Apr 2011-04-24 01:32 '11 pada 1:32 2011-04-24 01:32

Seorang teman memiliki masalah dengan Internet Explorer 8 , dan dia menunjukkan kepada saya apa yang dia lakukan. Saya mengatakan kepadanya bahwa itu salah, dan dia mengatakan kepada saya bahwa dia menerima jawaban di sini. Jawaban teratas saat ini tidak akan berfungsi di semua browser (misalnya, Internet Explorer 8), dan itu hanya akan menghapus kemunculan item pertama.

Hapus SEMUA instance dari array

 function remove(arr, item) { for (var i = arr.length; i--;) { if (arr[i] === item) { arr.splice(i, 1); } } } 

Itu beralih di atas array dalam arah yang berlawanan (karena indeks dan panjang berubah ketika elemen dihapus) dan menghapus elemen jika ditemukan. Bekerja di semua browser.

249
10 авг. Balas diberikan oleh Ben Lesh 10 Agustus 2013-08-10 22:21 '13 pada 10:21 2013-08-10 22:21

Ada dua pendekatan utama:

  1. splice () : anArray.splice(index, 1);

  2. delete : delete anArray[index];

Hati-hati saat Anda menggunakan delete untuk sebuah array. Ini bagus untuk menghapus atribut objek, tetapi tidak begitu bagus untuk array. Lebih baik menggunakan splice untuk array.

Ingatlah bahwa ketika Anda menggunakan delete untuk sebuah array, Anda mungkin mendapatkan hasil yang salah untuk anArray.length . Dengan kata lain, delete menghapus elemen tetapi tidak memperbarui nilai properti panjang.

Anda juga dapat mengharapkan untuk melihat lubang di nomor indeks setelah menggunakan penghapusan, misalnya, Anda bisa mendapatkan indeks 1,3,4,8,9,11 dan panjangnya, seperti sebelum menggunakan penghapusan. Dalam hal ini, semua yang diindeks for loop akan runtuh, karena indeks tidak lagi konsisten.

Jika Anda terpaksa menggunakan delete karena alasan apa pun, maka Anda harus menggunakan for each loop ketika Anda perlu mengu>

140
21 дек. balasan diberikan Sasa 21 Des. 2012-12-21 14:32 '12 pada 14:32 2012-12-21 14:32
 Array.prototype.remByVal = function(val) { for (var i = 0; i < this.length; i++) { if (this[i] === val) { this.splice(i, 1); i--; } } return this; } //Call like [1, 2, 3, 4].remByVal(3); 

116
24 апр. jawabannya diberikan Zirak 24 April. 2011-04-24 01:20 '11 pada 1:20 2011-04-24 01:20

Tidak perlu menggunakan indexOf atau splice . Namun, itu berfungsi lebih baik jika Anda ingin menghapus hanya satu kejadian item.

Temukan dan pindahkan (pindah):

 function move(arr, val) { var j = 0; for (var i = 0, l = arr.length; i < l; i++) { if (arr[i] !== val) { arr[j++] = arr[i]; } } arr.length = j; } 

Gunakan indexOf dan splice (indexof):

 function indexof(arr, val) { var i; while ((i = arr.indexOf(val)) != -1) { arr.splice(i, 1); } } 

Hanya gunakan splice (sambatan):

 function splice(arr, val) { for (var i = arr.length; i--;) { if (arr[i] === val) { arr.splice(i, 1); } } } 

Runtime on nodejs untuk array dengan 1000 elemen (rata-rata lebih dari 10.000 dimulai):

Indeks sekitar 10 kali lebih lambat daripada bergerak. Bahkan jika itu ditingkatkan dengan menghapus panggilan indexOf dalam sambungan, itu bekerja jauh lebih buruk daripada bergerak.

 Remove all occurrences: move 0.0048 ms indexof 0.0463 ms splice 0.0359 ms Remove first occurrence: move_one 0.0041 ms indexof_one 0.0021 ms 
86
19 сент. Jawabannya diberikan slosd 19 September 2013-09-19 04:53 '13 pada 4:53 2013-09-19 04:53

Cara termudah:

 var index = array.indexOf(item); if(index != -1) array.splice( index, 1 ); 
81
22 марта '19 в 14:28 2019-03-22 14:28 Jawaban diberikan oleh Nanego 22 Maret '19 pada 14:28 2019-03-22 14:28

Terlalu tua untuk dijawab, tetapi biarkan itu membantu seseorang dengan memberikan predikat alih-alih nilai.

CATATAN: ini akan memperbarui array ini dan mengembalikan baris yang terpengaruh.

penggunaan

 var removed = helper.removeOne(arr, row => row.id === 5 ); var removed = helper.remove(arr, row => row.name.startsWith('BMW')); 

Definisi

 var helper = { // Remove and return the first occurrence removeOne: function(array, predicate) { for (var i = 0; i < array.length; i++) { if (predicate(array[i])) { return array.splice(i, 1); } } }, // Remove and return all occurrences remove: function(array, predicate) { var removed = []; for (var i = 0; i < array.length;) { if (predicate(array[i])) { removed.push(array.splice(i, 1)); continue; } i++; } return removed; } }; 
58
02 мая '14 в 15:00 2014-05-02 15:00 jawabannya diberikan amd 02 Mei '14 pukul 15:00 2014-05-02 15:00

John Resig menerbitkan implementasi yang baik :

 // Array Remove - By John Resig (MIT Licensed) Array.prototype.remove = function(from, to) { var rest = this.slice((to || from) + 1 || this.length); this.length = from < 0 ? this.length + from : from; return this.push.apply(this, rest); }; 

Jika Anda tidak ingin memperluas objek global, Anda bisa melakukan sesuatu seperti berikut ini:

 // Array Remove - By John Resig (MIT Licensed) Array.remove = function(array, from, to) { var rest = array.slice((to || from) + 1 || array.length); array.length = from < 0 ? array.length + from : from; return array.push.apply(array, rest); }; 

Tetapi alasan utama saya mempublikasikan ini adalah untuk memperingatkan pengguna terhadap penerapan alternatif yang disarankan dalam komentar di halaman ini (14 Desember 2007):

 Array.prototype.remove = function(from, to){ this.splice(from, (to=[0,from||1,++to-from][arguments.length])<0?this.length+to:to); return this.length; }; 

Pada awalnya tampaknya itu berfungsi dengan baik, tetapi melalui proses menyakitkan yang saya temukan, gagal ketika mencoba untuk menghapus elemen kedua atau terakhir dalam array. Misalnya, jika Anda memiliki array 10 elemen, dan Anda mencoba menghapus elemen ke-9 sebagai berikut:

 myArray.remove(8); 

Anda akan mendapatkan array 8 elemen. Saya tidak tahu mengapa, tetapi saya menegaskan bahwa implementasi asli John tidak memiliki masalah ini.

55
30 авг. jawabannya diberikan Roger 30 Agustus. 2013-08-30 22:07 '13 pada pukul 10:07 malam 2013-08-30 22:07

Underscore.js dapat digunakan untuk menyelesaikan masalah dengan banyak browser. Menggunakan metode bawaan browser, jika ada. Jika hi>

Contoh sederhana untuk menghapus elemen dari array (dari situs):

 _.without([1, 2, 1, 0, 3, 1, 4], 0, 1); // => [2, 3, 4] 
53
30 мая '14 в 12:57 2014-05-30 12:57 jawabannya diberikan oleh vatsal pada 30 Mei '14 pukul 12:57 2014-05-30 12:57

Anda dapat melakukannya dengan mudah dengan metode filter :

 function remove(arrOriginal, elementToRemove){ return arrOriginal.filter(function(el){return el !== elementToRemove}); } console.log( remove([1, 2, 1, 0, 3, 1, 4], 1) ); 

Ini menghapus semua elemen dari array, dan juga bekerja lebih cepat daripada kombinasi slice dan indexOf.

52
11 февр. Jawabannya diberikan oleh Salvador Dali 11 Feb. 2014-02-11 01:06 '14 pada 1:06 2014-02-11 01:06

Jika Anda ingin array baru dengan posisi jarak jauh dihapus, Anda selalu dapat menghapus elemen tertentu dan memfilter array. Ini mungkin perlu memperluas objek array untuk browser yang tidak menerapkan metode filter, tetapi dalam jangka panjang itu lebih sederhana, karena semua yang Anda lakukan adalah:

 var my_array = [1,2,3,4,5,6]; delete my_array[4]; console.log(my_array.filter(function(a){return typeof a !== 'undefined';})); 

Harus ditampilkan [1, 2, 3, 4, 6]

40
18 окт. Jawab Loupax 18 Okt 2012-10-18 13:13 '12 pada 13:13 2012-10-18 13:13

Anda dapat menggunakan ES6.

 var array=['1','2','3','4','5','6'] var index = array.filter((value)=>value!='3'); 

Keluar:

 ["1", "2", "4", "5", "6"] 
37
04 окт. jawabannya diberikan rajat44 04 Oktober. 2016-10-04 11:07 '16 pada 11:07 2016-10-04 11:07

Lihatlah kode ini. Ini berfungsi di semua browser utama .

 remove_item = function (arr, value) { var b = ''; for (b in arr) { if (arr[b] === value) { arr.splice(b, 1); break; } } return arr; } 

Panggil fungsi ini

 remove_item(array,value); 
34
02 апр. Jawabannya diberikan oleh Ekramul Hoque 02 Apr. 2013-04-02 13:56 '13 pada 13:56 2013-04-02 13:56

Oke, misalnya, Anda memiliki array di bawah ini:

 var num = [1, 2, 3, 4, 5]; 

Dan kami ingin menghapus angka 4, Anda bisa membuat kode berikut:

 num.splice(num.indexOf(4), 1); //num will be [1, 2, 3, 5]; 

Jika Anda menggunakan kembali fungsi ini, Anda menulis fungsi yang dapat digunakan kembali yang akan dilampirkan ke fungsi array asli, seperti yang ditunjukkan di bawah ini:

 Array.prototype.remove = Array.prototype.remove || function(x) { const i = this.indexOf(x); if(i===-1) return; this.splice(i, 1); //num.remove(5) === [1, 2, 3]; } 

Tetapi bagaimana jika sebaliknya Anda memiliki array di bawah ini dengan beberapa [5] dalam array?

 var num = [5, 6, 5, 4, 5, 1, 5]; 

Kami membutuhkan loop untuk memeriksa semuanya, tetapi lebih mudah dan lebih efisien untuk menggunakan fungsi JavaScript bawaan, jadi kami menulis fungsi yang menggunakan filter, seperti yang ditunjukkan di bawah ini:

 const _removeValue = (arr, x) => arr.filter(n => n!==x); //_removeValue([1, 2, 3, 4, 5, 5, 6, 5], 5) //return [1, 2, 3, 4, 6] 

Ada juga perpustakaan pihak ketiga yang dapat membantu Anda melakukan ini, misalnya, Lodash atau Underscore, untuk informasi lebih lanjut lihat lodash _.pull, _.pullAt atau _.without.

32
10 мая '17 в 12:39 2017-05-10 12:39 Jawaban diberikan oleh Alireza pada 10 Mei 17 di 12:39 2017-05-10 12:39

Anda dapat menggunakan lodash _.pull (array mutasi), _.pullAt (array mutasi) atau _.without (tidak mengubah array),

 var array1 = ['a', 'b', 'c', 'd'] _.pull(array1, 'c') console.log(array1) // ['a', 'b', 'd'] var array2 = ['e', 'f', 'g', 'h'] _.pullAt(array2, 0) console.log(array2) // ['f', 'g', 'h'] var array3 = ['i', 'j', 'k', 'l'] var newArray = _.without(array3, 'i') // ['j', 'k', 'l'] console.log(array3) // ['i', 'j', 'k', 'l'] 
32
25 авг. jawabannya diberikan Chun Yang 25 Agustus. 2015-08-25 22:34 '15 jam 10:34 2015-08-25 22:34

Saya baru mengenal javascript dan saya membutuhkan fungsi ini. Saya baru saja menulis ini:

 function removeFromArray(array, item, index) { while((index = array.indexOf(item)) > -1) { array.splice(index, 1); } } 

Lalu ketika saya ingin menggunakan ini:

 //Set-up some dummy data var dummyObj = {name:"meow"}; var dummyArray = [dummyObj, "item1", "item1", "item2"]; //Remove the dummy data removeFromArray(dummyArray, dummyObj); removeFromArray(dummyArray, "item2"); 

Keluar - seperti yang diharapkan. ["item1", "item1"]

Anda mungkin memiliki kebutuhan lain selain saya, sehingga Anda dapat dengan mudah mengubahnya sesuai dengan kebutuhan Anda. Saya harap ini membantu seseorang.

27
16 янв. jawabannya diberikan oleh sofiax 16 Jan 2014-01-16 14:27 '14 pada 14:27 2014-01-16 14:27

ES6 dan tanpa mutasi: (Oktober 2016)

 const removeByIndex = (list, index) => [ ...list.slice(0, index), ...list.slice(index + 1) ]; 

Lalu:

 removeByIndex([33,22,11,44],1) //=> [33,11,44] 
24
07 окт. Jawaban yang diberikan oleh Abdennour TOUMI 07 Okt 2016-10-07 22:42 '16 jam 10:42 malam 2016-10-07 22:42

Pembaruan: Metode ini disarankan hanya jika Anda tidak dapat menggunakan ECMAScript 2015 (sebelumnya dikenal sebagai ES6). Jika Anda dapat menggunakannya, jawaban lain di sini menyediakan implementasi yang jauh lebih akurat.


Daftar ini menyelesaikan masalah Anda dan juga menghapus semua kemunculan argumen, bukan 1 (atau nilai yang ditentukan).

 Array.prototype.destroy = function(obj){ // Return null if no objects were found and removed var destroyed = null; for(var i = 0; i < this.length; i++){ // Use while-loop to find adjacent equal objects while(this[i] === obj){ // Remove this[i] and store it within destroyed destroyed = this.splice(i, 1)[0]; } } return destroyed; } 

Gunakan:

 var x = [1, 2, 3, 3, true, false, undefined, false]; x.destroy(3); // => 3 x.destroy(false); // => false x; // => [1, 2, true, undefined] x.destroy(true); // => true x.destroy(undefined); // => undefined x; // => [1, 2] x.destroy(3); // => null x; // => [1, 2] 
21
13 марта '13 в 12:28 2013-03-13 12:28 jawabannya diberikan zykadelic 13 Maret, '13 pada 12:28 2013-03-13 12:28

Berikut adalah beberapa cara untuk menghapus elemen dari array menggunakan javascript .

Semua metode yang dijelaskan tidak mengubah array asli , tetapi membuat yang baru.

Jika Anda tahu indeks item

Misalkan Anda memiliki array dan Anda ingin menghapus elemen di posisi i .

Salah satu metode adalah menggunakan slice() :

 const items = ['a', 'b', 'c', 'd', 'e', 'f'] const valueToRemove = 'c' const filteredItems = items.filter(item => item !== valueToRemove) console.log(filteredItems) 

Ini menggunakan fungsi panah ES6. Anda dapat menggunakan fitur tradisional untuk mendukung browser lama:

Berdasarkan nilai

Anda dapat mencari penyertaan di dalam fungsi panggilan balik:

https://flaviocopes.com/how-to-remove-item-from-array/ ) 

20
04 мая '18 в 8:17 2018-05-04 08:17 Jawaban diberikan oleh Flavio Copes pada 04 Mei 18 jam 8:17 2018-05-04 08:17

Jika Anda memiliki objek kompleks dalam array, dapatkah Anda menggunakan filter? Dalam situasi di mana $ .inArray atau array.splice tidak mudah digunakan. Terutama jika objek mungkin kecil dalam array.

Misalnya, jika Anda memiliki objek dengan bidang ID dan Anda ingin menghapus objek dari array:

 this.array = this.array.filter(function(element, i) { return element.id !== idToRemove; }); 
20
09 апр. jawabannya diberikan jam 09 apr. 2015-04-09 13:00 '15 pukul 13:00 2015-04-09 13:00

Anda seharusnya tidak pernah mengubah array Anda ke array Anda. Bagaimana itu melawan pola pemrograman fungsional. Apa yang dapat Anda lakukan adalah membuat array baru tanpa referensi ke array yang ingin Anda ubah data menggunakan metode filter es6;

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

Misalkan Anda ingin menghapus 5 dari array, Anda bisa melakukannya seperti ini.

 myArray = myArray.filter(value => value !== 5); 

Ini akan memberi Anda array baru tanpa nilai yang ingin Anda hapus. Jadi hasilnya akan seperti itu

  [1,2,3,4,6]; // 5 has been removed from this array 

Untuk pemahaman lebih lanjut, Anda dapat membaca dokumentasi MDN di Array.filter https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

19
26 дек. Jawaban yang diberikan oleh Adeel Imran 26 Des 2017-12-26 22:32 '17 pada 10:32 malam 2017-12-26 22:32

Pendekatan yang lebih modern adalah ECMAScript 2015 (sebelumnya dikenal sebagai Harmony atau ES 6). Diberikan:

 const items = [1, 2, 3, 4]; const index = 2; 

Lalu:

 items.filter((x, i) => i !== index); 

Menghasilkan:

 [1, 2, 4] 

Anda dapat menggunakan Babel dan layanan polyfill untuk memastikan bahwa ini didukung dengan baik di semua browser.

18
25 апр. jawabannya diberikan oleh bjfletcher 25 apr. 2016-04-25 13:21 '16 pada 1:21 malam 2016-04-25 13:21

Saya tahu bahwa sudah ada banyak jawaban, tetapi banyak dari mereka yang tampaknya terlalu memperumit masalah. Berikut ini adalah metode rekursif sederhana untuk menghapus semua instance dari panggilan - kunci sendiri sampai indeks ditemukan. Ya, itu hanya bekerja di browser dengan indexOf , tetapi sederhana dan dapat dengan mudah diisi.

Fungsi otonom

 function removeAll(array, key){ var index = array.indexOf(key); if(index === -1) return; array.splice(index, 1); removeAll(array,key); } 

Metode prototipe

 Array.prototype.removeAll = function(key){ var index = this.indexOf(key); if(index === -1) return; this.splice(index, 1); this.removeAll(key); } 
16
03 февр. Jawabannya diberikan wharding28 03 Feb. 2014-02-03 18:41 '14 pada 18:41 2014-02-03 18:41

Berdasarkan semua jawaban yang sebagian besar benar, dan dengan mempertimbangkan rekomendasi terbaik (terutama tanpa >

 function arrayWithout(arr, values) { var isArray = function(canBeArray) { if (Array.isArray) { return Array.isArray(canBeArray); } return Object.prototype.toString.call(canBeArray) === '[object Array]'; }; var excludedValues = (isArray(values)) ? values : [].slice.call(arguments, 1); var arrCopy = arr.slice(0); for (var i = arrCopy.length - 1; i >= 0; i--) { if (excludedValues.indexOf(arrCopy[i]) > -1) { arrCopy.splice(i, 1); } } return arrCopy; } 

Menganalisis fungsi di atas, meskipun faktanya berfungsi dengan baik, saya menyadari bahwa mungkin ada beberapa peningkatan kinerja. Juga, menggunakan ES6 bukan ES5 adalah pendekatan yang jauh lebih baik. Untuk melakukan ini, ini adalah kode yang ditingkatkan:

 const arrayWithoutFastest = (() => { const isArray = canBeArray => ('isArray' in Array) ? Array.isArray(canBeArray) : Object.prototype.toString.call(canBeArray) === '[object Array]'; let mapIncludes = (map, key) => map.has(key); let objectIncludes = (obj, key) => key in obj; let includes; function arrayWithoutFastest(arr, ...thisArgs) { let withoutValues = isArray(thisArgs[0]) ? thisArgs[0] : thisArgs; if (typeof Map !== 'undefined') { withoutValues = withoutValues.reduce((map, value) => map.set(value, value), new Map()); includes = mapIncludes; } else { withoutValues = withoutValues.reduce((map, value) => { map[value] = value; return map; } , {}); includes = objectIncludes; } const arrCopy = []; const length = arr.length; for (let i = 0; i < length; i++) { // If value is not in exclude list if (!includes(withoutValues, arr[i])) { arrCopy.push(arr[i]); } } return arrCopy; } return arrayWithoutFastest; })();