Kaip pašalinti tam tikrą elementą iš masyvo javascript?

Turiu sveikų skaičių masyvą, ir naudoju .push() metodą, kad į jį būtų pridėta elementų.

Ar yra paprastas būdas pašalinti tam tikrą elementą iš masyvo? Už kažką panašaus array.remove(int); .

Turiu naudoti pagrindinį javascript - neleidžiama naudoti jokių sistemų.

6774
24 апр. Walker nustatė balandžio 24 d 2011-04-24 01:17 '11 prie 1:17 2011-04-24 01:17
@ 78 atsakymai
  • 1
  • 2
  • 3

Raskite masyvo elemento, kurį norite pašalinti, indeksą, o tada ištrinkite šį indeksą naudodami splice .

Metodas () susieja masyvo turinį, ištrindamas esamus elementus ir (arba) pridedant naujus elementus.

„IndexOf“ naršyklės palaikymas yra ribotas;  Jis nepalaikomas „Internet Explorer 7“ ir 8 versijose. 

Jei jums nereikia palaikomos naršyklės indexOf , pabandykite polyfill kitą polyfill . Čia rasite daugiau informacijos apie šį polyfill .

 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 апр. Atsakymą pateikė Tom Wadley balandžio 24 d 2011-04-24 01:23 '11 prie 1:23 2011-04-24 01:23

Aš nežinau, kaip jūs tikitės, kad „ array.remove(int) veiks. Galima galvoti apie tris galimybes.

Norėdami pašalinti masyvo elementą, kurio indeksas yra i :

 array.splice(i, 1); 

Jei norite pašalinti kiekvieną elementą su number reikšme iš masyvo:

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

Jei tiesiog norite sukurti elementą su indeksu, i nebeegzistuojau, bet nenorite, kad kitų elementų indeksai pasikeistų:

 delete array[i]; 
990
24 апр. Peter Olson atsakymas, pateiktas balandžio 24 d 2011-04-24 01:20 '11 prie 1:20 2011-04-24 01:20

Redaguota 2016 m. Spalio mėn

  • Padarykite jį paprastą, intuityvų ir aiškų ( https://en.wikipedia.org/wiki/Occam%27s_razor )
  • Padarykite jį nepakeistą (originalus masyvas išliks nepakitęs)
  • Atlikite tai su standartinėmis JS funkcijomis, jei jūsų naršyklė jų nepalaiko - naudokite polifilą

Šiame kodo pavyzdyje naudoju masyvo funkciją array.filter (...), kad pašalintumėte nepageidaujamus elementus iš masyvo, ši funkcija nekeičia originalaus masyvo ir sukuria naują. 1.5 versija), apsvarstykite galimybę naudoti „ Mozilla“ polifilų filtrą .

Elemento ištrynimas (ECMA-262 Edition 5 kodas, žinomas kaip senoji JS)

 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 ] 

Elemento trynimas (ES2015 kodas)

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

SVARBU ES2015 "() => {}" rodyklės funkcijų sintaksė paprastai nepalaikoma IE, Chrome iki 45 versijos, Firefox iki 22 versijos, Safari iki 10 versijos. Norėdami naudoti ES2015 sintaksę senesnėse naršyklėse, galite naudoti „ BabelJS“


Kelių elementų trynimas (ES2016 kodas)

Papildomas šio metodo privalumas yra tas, kad galite ištrinti kelis elementus.

 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 ] 

SVARBU „array.includes (...)“ nepalaiko „IE“, „Chrome“ iki 47 versijos, „Firefox“ iki 43 versijos, „Safari“ iki 9 versijos ir „Edge“ iki 14 versijos, taigi čia „Mozilla“ polaukiai

Pašalinti kelis elementus (išplėstinis eksperimentinis javascript ES2018?)

 // 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 = funkcija pašalinti (... forDeletion) {return this.filter (elementas =>! ForDeletion.includes (item))} tegul arr = [1, 2, 3, 4, 5, 3] // Šis privalomasis sintaksės pasiūlymas // naudojant šalinimo funkciją kaip "virtualus metodas" arr = arr :: pašalinti (2, 3, 5) console.log (arr) // [1, 4] rel = noreferrer> Pabandykite patys BabelJS: )

Pagalba

814
19 дек. Atsakymą pateikė Ujeenator gruodžio 19 d. 2013-12-19 22:54 '13, 10:54 val. 2013-12-19 22:54

Priklausomai nuo to, ar norite išsaugoti tuščią erdvę, ar ne.

Jei jums reikia tuščios vietos, pašalinimas bus teisingas:

 delete array[ index ]; 

Jei to nepadarysite, naudokite sujungimo metodą:

 array.splice( index, 1 ); 

Ir jei jums reikia šio elemento vertės, galite tiesiog išsaugoti grąžintą masyvo elementą:

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

Jei norite tai padaryti tam tikra tvarka, galite naudoti array.pop() pastarajam arba array.shift() pirmajam (ir abu grąžina elemento vertę).

Ir jei nežinote elemento indekso, galite naudoti array.indexOf( item ) , kad jį gautumėte ( if() kad gautumėte vieną elementą arba while() kad gautumėte visus juos). array.indexOf( item ) grąžina indeksą arba -1, jei nerastas.

381
24 апр. atsakymas duotas xavierm02 Bal 24 2011-04-24 01:32 '11 ne 1:32 2011-04-24 01:32

Draugas turėjo problemų su „ Internet Explorer 8“ , ir jis man parodė, ką jis padarė. Sakiau jam, kad tai buvo negerai, ir jis man pasakė, kad jis gavo atsakymą. Dabartinis aukščiausias atsakymas neveiks visose naršyklėse (pvz., „Internet Explorer 8“), ir jis tik pašalins pirmą elemento įvykį.

Pašalinkite VISUS atvejus iš masyvo

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

Jis juda atgal per masyvą (kadangi indeksai ir ilgis pasikeis, kai elementai bus pašalinti) ir ištrinamas elementas, jei jis bus rastas. Jis veikia visose naršyklėse.

249
10 авг. Ben Lesh atsakymas rugpjūčio 10 d 2013-08-10 22:21 '13, 10:21 val. 2013-08-10 22:21

Yra du pagrindiniai metodai:

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

  • ištrinti : delete anArray[index];

Būkite atsargūs, kai naudojate ištrynimą masyvui. Tai gerai, jei norite pašalinti objekto atributus, bet ne taip gerai masyvams. Geriau naudoti masyvus.

Atminkite, kad kai naudojate delete masyvui, galite gauti neteisingus rezultatus „ anArray.length . Kitaip tariant, delete ištrina elementą, bet neatnaujina ilgio turto vertės.

Pavyzdžiui, naudodami ištrynimą, indeksų numeriuose taip pat galite tikėtis skylių. galite gauti indeksus 1,3,4,8,9,11 ir ilgį, kaip tai buvo prieš ištrynimą. Tokiu atveju visi kilpų indeksai bus suskirstyti, nes indeksai nebėra nuoseklūs.

Jei dėl kokių nors priežasčių turite naudoti delete , turite naudoti for each kilpą, kai reikia kartoti per masyvus. Iš tikrųjų, jei įmanoma, visada venkite naudoti kilpas. Taigi kodas bus patikimesnis ir mažiau linkęs į problemų su indeksais problemas.

140
21 дек. atsakymas suteiktas 21 d. 2012-12-21 14:32 '12 ne 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 апр. atsakymas pateikiamas Zirak 24 d. 2011-04-24 01:20 '11 prie 1:20 2011-04-24 01:20

Nereikia naudoti indexOf arba splice . Tačiau jis veikia geriau, jei norite pašalinti tik vieną elemento įvykį.

Rasti ir perkelti (perkelti):

 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; } 

Naudokite „ indexOf ir „ splice (indexof):

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

Naudokite tik splice :

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

„1000“ elementų masyvo „nodejs“ pateikimo laikas (vidutiniškai daugiau nei 10 000 eilučių):

Indeksas yra apie 10 kartų mažesnis nei judėjimas. Net jei jis yra pagerintas pašalinant indexOf skambutį splice, jis atlieka daug blogiau nei juda.

 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 сент. Atsakymas pateikiamas rugsėjo 19 d 2013-09-19 04:53 '13, 4:53, 2013-09-19 04:53

Lengviausias būdas:

 var index = array.indexOf(item); if(index != -1) array.splice( index, 1 ); 
81
02 дек. Atsakymą pateikė Nanego 02 gruodis. 2017-12-02 20:42 '17 at 8:42 pm 2017-12-02 20:42

Per senas, kad galėtumėte atsakyti, bet ar jis gali padėti kažkam pateikdamas predikatą vietoj vertės.

PASTABA: ji atnaujins šią masyvą ir grąžins paveiktas linijas.

Naudojimas

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

Apibrėžimas

 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 atsakymas pateikiamas 02 gegužės 14 d. 15 val. 2014-05-02 15:00

Johnas Resigas paskelbė gerą įgyvendinimą :

 // 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); }; 

Jei nenorite išplėsti pasaulinio objekto, galite tai padaryti taip:

 // 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); }; 

Tačiau pagrindinė priežastis, dėl kurios skelbiu tai, yra įspėti vartotojus apie alternatyvų įgyvendinimą, siūlomą šio puslapio komentaruose (2007 m. Gruodžio 14 d.):

 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; }; 

Iš pradžių atrodo, kad jis gerai veikia, bet per skausmingą procesą atradau, kad jis neveikia, bandydamas pašalinti antrąjį į paskutinį masyvo elementą. Pvz., Jei turite 10 elementų masyvą ir bandote pašalinti 9-ąjį elementą:

 myArray.remove(8); 

Kaip rezultatas, jūs gaunate 8 elementų masyvą. Nežinau, kodėl, bet patvirtinau, kad pradinis Jono įgyvendinimas neturi šios problemos.

55
30 авг. atsakymas pateikiamas Roger 30 rug. 2013-08-30 22:07 '13, 10:07 pm 2013-08-30 22:07

„Underscore.js“ gali būti naudojama keleto naršyklių problemoms spręsti. Jis naudoja naršyklės įmontuotus metodus, jei tokių yra. Jei jų trūksta, kaip ir senesnių „Internet Explorer“ versijų atveju, jis naudoja savo metodus.

Paprastas elementų iš masyvo pašalinimo pavyzdys (iš svetainės):

 _.without([1, 2, 1, 0, 3, 1, 4], 0, 1); // => [2, 3, 4] 
53
30 мая '14 в 12:57 2014-05-30 12:57 atsakymas pateikiamas vatsal , gegužės 30 d. 14, 12:57 2014-05-30 12:57

Tai galite padaryti lengvai naudojant filtravimo metodą:

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

Tai pašalina visus elementus iš masyvo ir taip pat veikia greičiau nei derinys su indeksu ir indeksu.

52
11 февр. Atsakymą pateikė Salvador Dali 11 vasaris. 2014-02-11 01:06 '14 at 1:06 2014-02-11 01:06

Jei norite ištrinti naują masyvą su ištrintomis pozicijomis, visada galite ištrinti konkretų elementą ir filtruoti masyvą. Gali prireikti išplėsti masyvo objektą naršyklėms, kurios neįgyvendina filtro metodo, tačiau ilgainiui tai lengviau, nes viskas, ką darote, yra tokia:

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

Turi būti rodoma [1, 2, 3, 4, 6]

40
18 окт. Atsakyti Loupax Oct 18 2012-10-18 13:13 '12 13:13 2012-10-18 13:13

Galite naudoti ES6.

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

Išeiti:

 ["1", "2", "4", "5", "6"] 
37
04 окт. atsakymas pateikiamas rajat44 04 oct. 2016-10-04 11:07 '16 at 11:07 2016-10-04 11:07

Patikrinkite šį kodą. Jis veikia kiekvienoje pagrindinėje naršyklėje. .

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

Skambinkite šią funkciją

 remove_item(array,value); 
34
02 апр. Atsakymą pateikė Ekramul Hoque 02 Bal. 2013-04-02 13:56 '13, 13:56, 2013-04-02 13:56

Galite naudoti lodash _. traukti (mutuoti masyvą), _.pullAt (mutuoti masyvą) arba _. be (nesusimato masyvo),

 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 авг. atsakymas pateikiamas Chun Yang 25 rug. 2015-08-25 22:34 '15 prie 10:34 pm 2015-08-25 22:34

Pvz., Gerai matote toliau pateiktą masyvą:

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

Ir mes norime ištrinti 4 numerį, galite tiesiog padaryti šį kodą:

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

Jei naudosite šią funkciją, parašysite pakartotinio naudojimo funkciją, kuri bus susieta su „Native array“ funkcija, kaip parodyta žemiau:

 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]; } 

Bet kaip apie tai, ar turite žemiau esančią masyvą, ir keletą [5] s masyvo?

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

Norint juos patikrinti, mums reikia kilpos, tačiau lengviau ir efektyviau naudoti integruotas „JavaScript“ funkcijas, todėl rašome funkciją, kurioje naudojamas filtras, kaip parodyta toliau:

 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] 

Taip pat yra trečiųjų šalių bibliotekos, kurios padės jums tai padaryti, pvz., „Lodash“ arba „Underscore“, jei norite gauti daugiau informacijos apie lodash _.pull, _.pullAt arba _.without.

32
10 мая '17 в 12:39 2017-05-10 12:39 Atsakymą Alireza pateikė gegužės 10 d. 17 val. 12:39 2017-05-10 12:39

Aš esu naujas „JavaScript“ ir reikia šios funkcijos. Aš ką tik parašiau:

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

Tada, kai noriu jį naudoti:

 //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"); 

Išeiti - kaip tikėtasi. ["elementas1", "elementas1"]

Jums gali būti skirtingi poreikiai nei man, todėl galite juos lengvai pakeisti. Tikiuosi, kad tai padės kam nors.

27
16 янв. atsakymą pateikė sofiax 16 sausis 2014-01-16 14:27 '14, 14:27, 2014-01-16 14:27

ES6 ir be mutacijos: (2016 m. Spalio mėn.)

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

Tada:

 removeByIndex([33,22,11,44],1) //=> [33,11,44] 
24
07 окт. Abdennour TOUMI atsakymas, 07 spalis 2016-10-07 22:42 '16 at 22:42 pm 2016-10-07 22:42

Atnaujinimas: šis metodas rekomenduojamas tik tuo atveju, jei negalite naudoti „ECMAScript 2015“ (anksčiau žinomas kaip ES6). Jei galite jį naudoti, kiti atsakymai čia suteikia daug pažangių diegimų.


Ši reikšmė čia išspręs jūsų problemą, taip pat pašalins visus argumento įvykius, o ne tik 1 (arba nurodytą vertę).

 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; } 

Taikymas:

 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 atsakymas pateikiamas zykadelic kovo 13 d., 13 val. 12:28 2013-03-13 12:28

Jei turite sudėtingų objektų masyve, ar galite naudoti filtrus? Tais atvejais, kai $ .inArray arba array.splice nėra taip paprasta naudoti. Ypač jei objektai yra maži matricoje.

Pavyzdžiui. jei turite objektą su „Id“ lauku ir norite, kad objektas būtų pašalintas iš masyvo:

 this.array = this.array.filter(function(element, i) { return element.id !== idToRemove; }); 
20
09 апр. Atsakymą pateikė flurdy 09 Apr 2015-04-09 13:00 '15 13:00 val. 2015-04-09 13:00

Štai keletas būdų, kaip pašalinti elementą iš masyvo naudojant „JavaScript“ .

Visi aprašyti metodai nekeičia originalaus masyvo ir sukuria naują.

Jei žinote elemento indeksą

Tarkime, jūs turite masyvą ir norite ištrinti elementą i padėtyje.

Vienas iš būdų yra naudoti slice() :

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

Jis naudoja ES6 rodyklių funkcijas. Jei norite palaikyti senesnes naršykles, galite naudoti tradicines funkcijas:

 const items = ['a', 'b', 'c', 'd', 'e', 'f'] const removeItem = (items, i) => items.slice(0, i-1).concat(items.slice(i, items.length)) let filteredItems = removeItem(items, 3) filteredItems = removeItem(filteredItems, 5) //["a", "b", "c", "d"] console.log(filteredItems) 

Pagal vertę

Galite ieškoti įtraukimo į atgalinio ryšio funkciją:

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

20
04 мая '18 в 8:17 2018-05-04 08:17 Atsakymą pateikė Flavio Copes gegužės 4 d. 18 d. 8:17 val. 2018-05-04 08:17

Jūs niekada neturėtumėte keisti masyvo matricos. Kadangi tai prieštarauja funkciniam programavimo modeliui. Tai, ką galite padaryti, yra sukurti naują masyvą be nuorodos į masyvą, kurį norite keisti duomenis naudojant ES6 filter metodą;

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

Tarkime, kad norite pašalinti 5 iš masyvo, galite tiesiog tai padaryti.

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

Tai suteiks jums naują masyvą be vertės, kurią norite ištrinti. Taigi rezultatas bus

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

Norėdami sužinoti daugiau, galite perskaityti MDN dokumentaciją „Array.filter“ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

19
26 дек. Adeel Imran atsakymas gruodžio 26 d 2017-12-26 22:32 '17, 10:32 pm 2017-12-26 22:32

Modernesnė, „ ECMAScript 2015“ (anksčiau žinoma kaip „Harmony“ arba „ES 6“). Atsižvelgiant į:

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

Tada:

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

Cesija:

 [1, 2, 4] 

Galite naudoti „ Babel“ ir „ polifill“ paslaugas, kad naršyklės būtų geros.

18
25 апр. atsakymą pateikė bjfletcher 25 balandis. 2016-04-25 13:21 '16 at 13:21 pm 2016-04-25 13:21

Žinau, kad jau yra daug atsakymų, tačiau daugelis jų, atrodo, apsunkina problemą. Štai paprastas, rekursinis būdas pašalinti visus raktų egzempliorius - jis vadina save tol, kol bus rastas indeksas. Taip, ji veikia tik naršyklėse su indexOf , bet ji yra paprasta ir lengvai užpildoma.

Autonominė funkcija

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

Prototipo metodas

 Array.prototype.removeAll = function(key){ var index = this.indexOf(key); if(index === -1) return; this.splice(index, 1); this.removeAll(key); } 
16
03 февр. Atsakymas yra duotas 28 03 vasario mėn. 2014-02-03 18:41 '14 at 18:41 2014-02-03 18:41

Turiu dar vieną gerą sprendimą pašalinti iš masyvo:

 var words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present']; const result = words.filter(word => word.length > 6); console.log(result); // expected output: Array ["exuberant", "destruction", "present"] 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter

15
05 июня '18 в 17:47 2018-06-05 17:47 atsakė Aram Grigoryan'ui birželio 5 d. 18 d. 17:47. 2018-06-05 17:47

Galite padaryti atvirkštinę kilpą, kad įsitikintumėte, jog nesugręžėte indeksų, jei yra keli elemento atvejai.

 var myElement = "chocolate"; var myArray = ['chocolate', 'poptart', 'poptart', 'poptart', 'chocolate', 'poptart', 'poptart', 'chocolate'];  for (var i = myArray.length - 1; i >= 0; i--) { if (myArray[i] == myElement) myArray.splice(i, 1); } 

Tiesioginis demonstravimas

15
12 авг. atsakymą pateikė Jeff Noel 12 rug. 2013-08-12 20:56 '13, 20:56, 2013-08-12 20:56

Remdamasis visais teisingais atsakymais ir atsižvelgiant į geriausias rekomendacijas (ypač nesinaudojant tiesiogiai „Array.prototype“), atėjau šį kodą:

 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; }