Javascript - uklanjanje - js polja. Kako ukloniti određeni element JavaScript polja? Ukloni element iz niza javascript

💖 Sviđa li vam se? Podijelite vezu sa svojim prijateljima

Opisao sam samo neke od metoda rada s nizovima.

Ovdje ćemo govoriti o dodavanju i uklanjanju elemenata niza. O prevrtanju i sortiranju niza, kao i o rezanju, zamjeni i kombiniranju nizova.

Dodavanje elemenata nizu.

Svojstvo duljine možete koristiti za dodavanje novih elemenata u polje:

Var myArray = ["Apple", "Microsoft", "Google", "Facebook"]; myArray = "Yahoo!"; console.log(myArray); // ["Apple", "Microsoft", "Google", "Facebook", "Yahoo!"]

Ovo će uspjeti jer... elementi niza su numerirani počevši od nule, a duljina je za jedan više. Dužina je uvijek ekvivalentna indeksu + 1, tako da je vrlo lako dodati novi element na kraj niza. Začudo, možete dodati element na poziciju koja je mnogo veća od duljine samog niza:

Var myArray = ["Jimi Hendrix", "Eric Clapton", "Jimmy Page", "Keith Richards"]; myArray = "Lindsey Buckingham"; console.log(myArray); // ["Jimi Hendrix", "Eric Clapton", "Jimmy Page", "Keith Richards", nedefinirano × 95, "Lindsey Buckingham"] console.log(myArray.length); // 100

Kao što je prikazano u komentarima, ovo će dodati 95 praznih utora i element "Lindsey Buckingham" na kraj niza. Nakon ovoga ćemo dobiti duljinu od 100. Drugi način za dodavanje novog elementa u polje je korištenje metode push():

Var myArray = ["Paul McCartney", "John Lennon", "George Harrison"]; myArray.push("Ringo Starr", "George Martin"); console.log(myArray); // ["Paul McCartney", "John Lennon", "George Harrison", "Ringo Starr", "George Martin"]

Metoda push() uvijek vraća novu duljinu niza (5 u našem slučaju). Možete dodati element koristeći splice():

Var myArray = ["žir", "bukva", "mongongo", "makadamija"]; myArray.splice(2, 0, "indijski orah"); // dodaje "indijski orah" u indeks 2 console.log(myArray); // ["žir", "bukva", "indijski orah", "mongongo", "makadamija"]

Kada je drugi argument 0, to znači da nijedan element neće biti uklonjen, pa će stoga svi sljedeći argumenti biti dodani u niz na mjestu navedenom u prvom argumentu.

Uklanjanje elemenata iz niza

Uklanjanje elementa malo je teže nego njegovo dodavanje. Za uklanjanje elementa s kraja niza, možete koristiti pop():

Var myArray = ["7-up", "Sprite", "Ginger Ale", "Lemonade"]; moj niz.pop(); console.log(myArray); // ["7-up", "Sprite", "Ginger Ale"]

Metoda pop() uvijek uklanja zadnji element u nizu i vraća ga.

Također možete koristiti metodu splice():

Var myArray = ["maniok", "muškatni oraščić", "lupina", "rabarbara"]; myArray.splice(2, 1); // uklanjanje elementa s indeksom 2 console.log(myArray); // ["kasava", "muškatni oraščić", "rabarbara"]

Za razliku od metode splice(), koja se koristi za dodavanje elemenata, ovdje je drugi argument 1, što govori da želimo ukloniti element s indeksom 2 (ili 3. po redu). U ovom slučaju, element "lupin" je uklonjen.

Element niza možete izbrisati pomoću operatora brisanja:

Var myArray = ["Byte Bandit", "Eliza", "Jeefo", "Michelangelo"]; console.log(myArray.length); // 4 brisanje myArray; // brisanje Eliza console.log(myArray.length); // 4 console.log(myArray); // ["Byte Bandit", nedefinirano × 1, "Jeefo", "Michelangelo"]

Prvi važna nota: delete() ne mijenja duljinu niza nakon brisanja elementa (čak i ako je to zadnji element u nizu). Drugo: delete() mijenja vrijednost elementa koji se briše u undefined, pa kada se pozove myArray = undefined.

Dobar način za uklanjanje elementa iz niza je korištenje Array.remove Johna Resiga. Ispod je primjer korištenja preuzet s njegove stranice:

// Uklanjanje polja - John Resig (licenca MIT) Array.prototype.remove = function(from, to) ( var rest = this.slice((to || from) + 1 || this.length); this.length = od< 0 ? this.length + from: from; return this.push.apply(this, rest); }; // Удаление 2 элемента из массива array.remove(1); // Удаление 2-ого элемента с конца массива array.remove(-2); // Удаление второго и третьего элемента array.remove(1,2); // Удаление последнего и предпоследнего элемента array.remove(-2,-1);

Možda biste željeli pogledati rješenje Viral Patela, jednu od funkcija u Underscore.js ili jQuery grep().

Uz to, JavaScript ima metodu shift() koja uklanja prvi element u nizu i vraća njegovu vrijednost. Pogledajmo kod:

Var myArray = ["Matt Kramer", "Jason Bieler", "Tom Defile", "Phil Varone"]; console.log(myArray.length); // 4 var firstItem = myArray.shift(); console.log(prva stavka); // Matt Kramer console.log(myArray.length); // 3 console.log(myArray); // ["Jason Bieler", "Tom Defile", "Phil Varone"]

Pomoću metode shift() uklonili smo element, ali smo njegovu vrijednost pohranili u našu varijablu firstItem. Duljina niza se promijenila sa 4 na 3.

Ova metoda može biti korisna u kombinaciji s metodom push(). Koristeći ih zajedno možemo učinkovito staviti elemente u red čekanja u nizu. Duljinu niza održavamo uklanjanjem elementa s početka i dodavanjem novog na kraj.

Suprotno tome, možemo koristiti metodu unshift() za dodavanje elementa na početak niza:

Var myArray = ["apito", "castanets", "maraca"]; console.log(myArray.length); // 3 myArray.unshift("traka zvona", "tan-tan"); console.log(myArray.length); // 5 console.log(myArray); // ["chime bar", "tan-tan", "apito", "castanets", "maraca"]

Korištenjem metode unshift() s metodom pop(), možete stvoriti redove u obrnuta strana, dodavanje elemenata na početak i uklanjanje s kraja niza.

Okretanje i sortiranje elemenata niza.

Da bismo obrnuli elemente u nizu, možemo koristiti reverse():

Var myArray = ["odbrojavanje", "konačno", "the"]; console.log(myArray); // ["countdown", "final", "the"] myArray = myArray.reverse(); console.log(myArray); // ["završno odbrojavanje"]

Moguće je poredati elemente niza abecednim redoslijedom pomoću metode sort():

Var myArray = ["ksilofoni", "zebre", "juggernauts", "avokado"]; console.log(myArray); // ["ksilofoni", "zebre", "juggernauts", "avokado"] myArray = myArray.sort(); console.log(myArray); // ["avokado", "juggernauts", "ksilofoni", "zebre"]

Ali ovo neće raditi s brojevima.

Var myArray = ; console.log(myArray); // myArray = myArray.sort(); console.log(myArray); //

Ako trebate sortirati brojeve, možete koristiti sljedeći kod:

Funkcija compareNumbers(a, b) ( return a - b; ) var myArray = ; console.log(myArray); // mojNiz = mojNiz.sort(usporediBrojeve); console.log(myArray); //

Kao što je gore prikazano, s jednostavnom funkcijom umetnutom u sort(), niz koji sadrži brojeve bit će ispravno sortiran.

Kombiniranje nizova.

Možemo kombinirati 2 ili više nizova i dobiti 1 niz koji sadrži elemente spojenih nizova. Da bismo to učinili koristimo metodu concat():

Var myArray = ["Jay Ferguson", "Andrew Scott"]; var myArray2 = ["Chris Murphy", "Patrick Pentland"]; var myNewArray = myArray.concat(myArray2); console.log(myNewArray); // ["Jay Ferguson", "Andrew Scott", "Chris Murphy", "Patrick Pentland"]

Var myArray = ["Jay Ferguson", "Andrew Scott"]; var myNewArray = myArray.concat("Chris Murphy", "Patrick Pentland"); console.log(myNewArray); // ["Jay Ferguson", "Andrew Scott", "Chris Murphy", "Patrick Pentland"]

Podjela niza.

Možemo stvoriti novi niz koji sadrži 1 ili više elemenata iz postojećeg niza pomoću funkcije slice():

Var myArray = ["Vokali", "Bas", "Gitara", "Bubnjevi", "Jabuke", "Naranče"]; var myNewArray = myArray.slice(4); console.log(myNewArray); // ["Jabuke", "Naranče"]

Metoda slice() uzima 1 ili 2 argumenta. Ako se proslijedi 1 argument (indeks), tada se stvara novi niz od svih elemenata starog, počevši od ovog indeksa. Ako su proslijeđena 2 argumenta, tada se kreira novi niz od elemenata počevši od prvog argumenta pa sve do elementa s indeksom proslijeđenim u drugom parametru, ne uključujući posljednji. Da bi bilo jasnije, pogledajmo kod u nastavku:

Var myArray = ["Vokali", "Bas", "Gitara", "Bubnjevi", "Jabuke", "Naranče"]; var myNewArray = myArray.slice(0, 4); console.log(myNewArray); // ["Vokali", "Bas", "Gitara", "Bubnjevi"]

Zamjena elemenata u nizu.

Koristimo splice() za uklanjanje elemenata iz niza, ali također možemo zamijeniti element u nizu novim elementima:

Var myArray = ["Rijeke Cuomo", "Patrick Wilson", "Brian Bell", "Matt Sharp"]; myArray.splice(3, 1, "Scott Shriner"); // zamijeni 1 element s indeksom 3 console.log(myArray); // ["Rivers Cuomo", "Patrick Wilson", "Brian Bell", "Scott Shriner"]

Metoda splice() uvijek vraća niz koji sadrži elemente koji su uklonjeni. Linija 2 vratit će 1 element "Brian Bell".

Zaključak

Ovi članci opisuju metode za rad s nizovima u JavaScriptu. Postoje neke dodatne stavke koje možete pogledati na MDN-u, a koje nisam uključio u ovaj post. Rade samo u IE9+, pa možda neće biti od koristi.

Ima li što za dodati? Ili znate li neku zanimljivu biblioteku koja će vam pomoći u upravljanju nizovima? Molimo komentirajte!

Postoji nekoliko metoda za uklanjanje elementa niza u JavaScriptu. To uključuje metode pop i shift. Pop metoda uklanja prvi element zbog ovog niza. Metoda shift uklanja posljednji element iz danog niza.

Duljinu niza možete postaviti na 0 ako želite ukloniti sve elemente iz danog niza. Ali što, trebate li ukloniti određeni element?

Na primjer:

Ime_niza.splice(indeks);

Ime_niza.brisanje

Možete koristiti metodu spajanja. Vraća novi niz uklonjenih elemenata. A izvorni niz sadrži preostale elemente.

Pogledajte demo u nastavku da biste saznali kako koristiti metodu spajanja JavaScripta i druge načine za uklanjanje određenih elemenata.

Demonstracija uklanjanja određenog elementa metodom spajanja

Ovaj demo stvara niz brojeva. U početku se nizu dodaje pet elemenata. Nakon toga, metoda spajanja se koristi za uklanjanje trećeg elementa. Na isti način možete ukloniti prvi element niza u JavaScriptu.

Elementi numeričkog niza prikazuju se prije i nakon uporabe JavaScript metoda spojiti ovako:

JavaScript kod s metodom spajanja:


"; za (i=0; i< Arr_Numbers.length; i++){ the_arr_before_after += Arr_Numbers[i] + "
"; ) document.getElementById("p1").innerHTML = the_arr_before_after; Arrretrun = Arr_Numbers.splice(2,1); var the_arr_before_after = "Elementi niza nakon metode spajanja:
"; za (i=0; i< Arr_Numbers.length; i++){ the_arr_before_after += Arr_Numbers[i] + "

Primijetit ćete da sam upotrijebio dva parametra za JavaScript za uklanjanje elementa niza. Prvi specificira indeks elementa koji se uklanja. Drugi je koliko elemenata treba ukloniti nakon navedenog ključa.

Sljedeći demo prikazuje slučaj u kojem koristimo drugi parametar.

Što ako drugi parametar nije naveden u JavaScript metodi spajanja?

Koristeći isti kod, ali bez drugog parametra u metodi spajanja:

Arr_Numbers.splice(2);

Kod i rezultat:

Pogledajte online demo i kod

Kao što vidite, svi elementi prije navedenog broja indeksa također su uklonjeni. Osim toga, metoda spajanja vraća niz uklonjenih elemenata.

JavaScript kôd:

var Arr_Numbers = ; var i; var the_arr_before_after = "Originalni niz:
"; za (i=0; i< Arr_Numbers.length; i++){ the_arr_before_after += Arr_Numbers[i] + "
"; ) document.getElementById("p1").innerHTML = the_arr_before_after; Arrretrun = Arr_Numbers.splice(2); var the_arr_before_after = "Elementi niza nakon metode spajanja:
"; za (i=0; i< Arr_Numbers.length; i++){ the_arr_before_after += Arr_Numbers[i] + "
"; ) document.getElementById("p2").innerHTML = the_arr_before_after; //Uklonjeni elementi niza u vraćenom nizu var the_arr_before_after = "Uklonjeni elementi niza:
"; za (i=0; i< Arrretrun.length; i++){ the_arr_before_after += Arrretrun[i] + "
"; ) document.getElementById("p3").innerHTML = the_arr_before_after;

Korištenje funkcije brisanja za uklanjanje elementa niza

Također možete koristiti funkciju delete za brisanje elementa niza u JavaScriptu. Ali štedi prazan prostor, a ako vratite taj niz nakon korištenja funkcije, uklonjeni element bit će prikazan kao nedefiniran.

Pogledajmo demo koji koristi funkciju brisanja:

Pogledajte online demo i kod

JavaScript kôd:

var Arr_Strings = ["The","JavaScript","Array","Totorial"]; var i; var the_arr_before_after = "Izvorni elementi niza nizova:

"; za (i=0; i< Arr_Strings.length; i++){ the_arr_before_after += Arr_Strings[i] + "
"; ) document.getElementById("p1").innerHTML = the_arr_before_after; //Upotrebom funkcije brisanja izbrišite Arr_Strings; var the_arr_before_after = "Elementi niza nakon metode spajanja:

"; za (i=0; i< Arr_Strings.length; i++){ the_arr_before_after += Arr_Strings[i] + "
"; ) document.getElementById("p2").innerHTML = the_arr_before_after;

Možete vidjeti da se treći element prikazuje kao nedefiniran nakon što je izbrisan pomoću funkcije brisanja.



ukloniti određeni element niza js(20)

Postoji li način za uklanjanje elementa iz JavaScript niza?

S obzirom na niz:

Var ary = ["tri", "sedam", "jedanaest"];

Želio bih učiniti nešto poput:

RemoveItem("sedam", ary);

Pogledao sam splice(), ali to uklanja samo broj pozicije, dok mi treba nešto za uklanjanje elementa prema njegovoj vrijednosti.

// uređeno zahvaljujući MarcoCI na savjetu

probaj:

Funkcija wantDelete(item, arr)( for (var i=0;i !(comment.Id === commentId));

Evo verzije koja koristi jQueryjevu funkciju inArray:

Var indeks = $.inArray(stavka, niz); if (index != -1) ( array.splice(index, 1); )

To možete postići pomoću funkcije Lodash _.remove.

var array = ["tri", "sedam", "jedanaest"]; var evens = _.remove(array, function(e) ( return e !== "sedam"; )); konzola.log(parnice);

Const _ = require("lodash"); _.bez(, 2); // ->

Stvarno, ne razumijem zašto se to ne može riješiti sa

Arr = arr.filter(vrijednost => vrijednost !== "sedam");

Ili možda želite koristiti vanilla JS

Arr = arr.filter(funkcija(vrijednost) ( ​​povratna vrijednost !== "sedam" ));

Druga varijanta:

If (!Array.prototype.removeArr) ( Array.prototype.removeArr = function(arr) ( if(!Array.isArray(arr)) arr=;//budimo dobri prema ljudima koji stavljaju vrijednost koja nije polje evo.. to bih mogao biti ja! var that = this; if(arr.length)( var i=0; while(i-1)( that.splice(i,1); )else i++; ) ) return that; ) )

Ovo je opet indexOf() unutar petlje, ali pod pretpostavkom da je niz koji se briše mali u odnosu na niz koji se briše; svako brisanje skraćuje while petlju.

To će vam omogućiti sljedeće:

Var ary = ["tri", "sedam", "jedanaest"]; var aryWithoutSeven = ary.filter(function(value) ( ​​​​return value != "seven" )); console.log(aryWithoutSeven); // vraća ["tri", "jedanaest"]

Ovo je također zabilježeno u ovoj temi na drugom mjestu: https://.com/a/20827100/293492

Nemojte koristiti opciju brisanja - ona pravi rupu u nizu, budući da ne indeksira ponovno elemente nakon izbrisanog elementa.

> Array.prototype.remove=function(v)( ... izbriši ovo ... ); > var myarray=["3","24","55","2"]; nedefinirano > myarray.remove("55"); nedefinirano > myarray [ "3", "24", "2" ]

Jedna linija će to učiniti,

Var ary = ["tri", "sedam", "jedanaest"]; // Ukloni stavku "sedam" iz niza var filteredAry = ary.filter(function(e) ( return e !== "sedam" )) //=> ["tri", "jedanaest"] // U ECMA6 (strelica sintaksa funkcije): var filteredAry = ary.filter(e => e !== "sedam")

Ovo koristi funkciju filtra u JS-u. Podržan je u IE9 i novijim verzijama.

filter() poziva dostavljenu funkciju povratnog poziva jednom za svaki element u nizu i stvara novi niz svih vrijednosti za koje povratni poziv vraća vrijednost koja se procjenjuje kao istinita. povratni poziv se poziva samo za indekse polja koji imaju dodijeljene vrijednosti; ne poziva se za indekse koji su ispušteni ili kojima nikada nisu dodijeljene vrijednosti. Elementi niza koji ne prođu test povratnog poziva jednostavno se preskaču i nisu uključeni u novi niz.

Dakle, u osnovi, to je isto kao sva ostala for (var key in ary) ( ... ) rješenja, osim što je for in podržan kao IE6.

U osnovi, filtar je praktična metoda koja izgleda mnogo ljepše (i može se ulančati) za razliku od for in konstruktora (AFAIK).

Provjeriti:

For(var i in array)( if(array[i]=="seven")( array.splice(i,1); break; ) )

i u funkciji:

Funkcija removeItem(array, item)( for(var i in array)( if(array[i]==item)( array.splice(i,1); break; ) ) ) removeItem(array, "seven");

Uklanjanje svih podudarnih elemenata iz niza (ne samo prvog, kao što se čini kao najopćenitiji odgovor ovdje):

Dok ($.inArray(stavka, niz) > -1) ( array.splice($.inArray(stavka, niz), 1); )

Koristio sam jQuery za teške poslove, ali shvatit ćete ako želite prijeći na izvorni jezik.

Trik je u tome da prođete kroz niz od početka do početka kako ne biste zabrljali indekse kada uklanjate elemente.

Var deleteMe = function(arr, me)( var i = arr.length; while(i--) if(arr[i] === me) arr.splice(i,1); ) var arr = ["narančasta ","crveno","crno", "narančasto", "bijelo" , "narančasto" ]; deleteMe(arr, "narančasto");

arr je sada ["crveno", "crno", "bijelo"]

Funkcija cleanArrayOfSpecificTerms(array,unwantedTermsArray) ( $.each(unwantedTermsArray, function(index, value) ( ​​​​var index = array.indexOf(value); if (index > -1) ( array.splice(index, 1); ) ); povratni niz; )

Za korištenje slijedite ove korake:

Var notInclude = ["Ne","Ne","Prvi","Zadnji","Prethodni","Sljedeći", "psi","mačke"]; var splitTerms = ["poziv", "log", "psi", "mačke", "tema", "promjena", "cijena"]; cleanArrayOfSpecificTerms(splitTerms,notInclude)

Pokušao sam upotrijebiti metodu funkcije iz jbarona iznad, ali sam otkrio da moram zadržati izvorni niz nepromijenjen za kasniju upotrebu i stvoriti novi niz poput ovog:

Var newArray = referenceArray;

Funkcija newArrRemoveItem(array, item, newArray)( for(var i = 0; i< array.length; i++) { if(array[i]!=item){ newArray.push(array[i]); } } }

Onda ga koristim ovako:

Var vesselID = record.get("VesselID"); var otherVessels = new Array(); newArrRemoveItem(vesselArr,vesselID,otherVessels);

Sada vesselArr ostaje netaknut i svaki put kad izvršim gornji kod, polje otherVessels uključuje sve osim posljednjeg CAID elementa.

indexOf je opcija, ali njezina implementacija u osnovi pretražuje cijeli niz za vrijednost, tako da se vrijeme izvršenja povećava s veličinom niza. (tako da je u svakom pregledniku, mislim, samo sam provjerio Firefox).

Nemam IE6 za testiranje, ali rekao bih da je sigurno da možete testirati najmanje milijun elemenata niza u sekundi na ovaj način na gotovo bilo kojem klijentskom stroju. Ako [veličina polja] * [ upite za pretraživanje po sekundi] mogao narasti na više od milijun, trebali biste razmisliti o drugačijoj implementaciji.

U osnovi možete koristiti objekt za stvaranje indeksa na vašem nizu, ovako:

Var index=("tri":0, "sedam":1, "jedanaest":2);

Svaki normalni okvir JavaScripta stvorit će indeks pretraživanja za takve objekte tako da možete brzo prevesti ključ u vrijednost, bez obzira koliko svojstava objekt ima.

Ovo je samo osnovna metoda, ovisno o vašim potrebama, možete kombinirati više objekata i/ili nizova kako biste iste podatke brzo pretraživali za različita svojstva. Ako navedete svoje specifične potrebe, mogu predložiti specifičniju strukturu podataka.

//Ova vam funkcija omogućuje uklanjanje parnog niza iz niza var removeFromArr = function(arr, elem) ( var i, len = arr.length, new_arr =, sort_fn = function (a, b) ( return a - b; ); za (i = 0;i< len; i += 1) { if (typeof elem === "object" && typeof arr[i] === "object") { if (arr[i].toString() === elem.toString()) { continue; } else { if (arr[i].sort(sort_fn).toString() === elem.sort(sort_fn).toString()) { continue; } } } if (arr[i] !== elem) { new_arr.push(arr[i]); } } return new_arr; }

Primjer upotrebe

Var arr = , "abc", 1, "1", 1]; removeFromArr(arr, 1); //["2", , "abc", "1"] var arr = [ , 2, "a", , ]; removeFromArr(arr, ); //]

Neka arr = ; konzola.log(arr); //rezultat let index = arr.indexOf(30); if (index > -1) ( arr.splice(index, 1); ) console.log(arr); //proizlaziti

Var index = array.indexOf("item"); if(index!=-1)( array.splice(index, 1); )

JavaScript operator brisanja uklanja svojstvo iz objekta; ako nema više referenci na isto svojstvo, ono se na kraju automatski oslobađa.

Izvor za ovaj interaktivni primjer pohranjen je u GitHub repozitorij. Ako želite doprinijeti projektu interaktivnih primjera, klonirajte https://github.com/mdn/interactive-examples i pošaljite nam zahtjev za povlačenje.

Brisanje sintakse izraz

Svaka varijabla definirana s var označena je kao nekonfigurabilna. U sljedećem primjeru, plaća se ne može konfigurirati i ne može se izbrisati. U nestriktnom načinu rada, operacija brisanja će vratiti false.

Funkcija Zaposlenik() ( brisanje plaće; var salary; ) Zaposlenik();

Pogledajmo kako se isti kod ponaša u strogom načinu rada. Umjesto vraćanja false, naredba pokreće SyntaxError.

"koristi strog"; function Employee() ( delete salary; // SyntaxError var salary; ) // Slično, svaki izravan pristup funkciji // s delete će pokrenuti SyntaxError function DemoFunction() ( //neki kod) delete DemoFunction; // Sintaktička pogreška

Primjeri // Stvara svojstvo adminName na globalnom opsegu. adminName = "xyz"; // Stvara svojstvo empCount na globalnom opsegu. // Budući da koristimo var, ovo je označeno kao nepodesivo. Isto vrijedi za let i const. var empCount = 43; EmployeeDetails = ( ime: "xyz", dob: 5, oznaka: "Developer" ); // adminName je svojstvo globalnog opsega. // Može se obrisati jer je kreiran bez var, // i stoga se može konfigurirati. izbrisati adminName; // vraća true // Naprotiv, empCount nije moguće konfigurirati // jer je korišten var. izbrisati empCount; // vraća false // delete se može koristiti za uklanjanje svojstava iz objekata. izbrisati EmployeeDetails.name; // vraća true // Čak i kada svojstvo ne postoji, delete vraća "true". brisanje EmployeeDetails.salary; // vraća true // brisanje ne utječe na ugrađena statička svojstva. brisanje Math.PI; // vraća false // EmployeeDetails je svojstvo globalnog opsega. // Budući da je definiran bez "var", označen je podesivim. izbrisati EmployeeDetails; // vraća istinitu funkciju f() ( var z = 44; // brisanje ne utječe na imena lokalnih varijabli brisanje z; // vraća lažno) brisanje i lanac prototipa

U sljedećem primjeru brišemo vlastito svojstvo objekta dok je svojstvo s istim imenom dostupno u lancu prototipa:

Funkcija Foo() ( this.bar = 10; ) Foo.prototype.bar = 42; var foo = new Foo(); // foo.bar pridružen je // vlastitom svojstvu. console.log(foo.bar); // 10 // Brisanje vlastitog svojstva unutar // foo objekta. brisanje foo.bar; // vraća true // foo.bar je još uvijek dostupan u // lancu prototipa. console.log(foo.bar); // 42 // Brisanje svojstva na prototipu. brisanje Foo.prototype.bar; // vraća true // Svojstvo "bar" više se ne može // naslijediti od Foo-a jer je // izbrisano. console.log(foo.bar); // nedefiniran

Brisanje elemenata niza

Kada izbrišete element niza, to ne utječe na duljinu niza. Ovo vrijedi čak i ako izbrišete posljednji element niza.

Kada operator delete ukloni element niza, taj element više nije u nizu. U sljedećem primjeru, stabla se uklanjaju pomoću delete.

Var stabla = ["sekvoja", "zaliv", "cedar", "hrast", "javor"]; brisanje stabala; if (3 u stablima) ( // ovo se ne izvršava )

Ako želite da element niza postoji, ali ima nedefiniranu vrijednost, upotrijebite nedefiniranu vrijednost umjesto operatora brisanja. U sljedećem primjeru stablima je dodijeljena vrijednost nedefinirana, ali element niza i dalje postoji:

Var stabla = ["sekvoja", "zaliv", "cedar", "hrast", "javor"]; stabla = nedefinirano; if (3 u stablima) ( // ovo se izvršava )

Ako umjesto toga želite ukloniti element niza promjenom sadržaja niza, upotrijebite metodu spajanja. U sljedećem primjeru, stabla su potpuno uklonjena iz niza pomoću spoja:

Var stabla = ["sekvoja", "zaliv", "cedar", "hrast", "javor"]; stabla.splice(3,1); konzola.log(stabla); // ["sekvoja", "zaliv", "cedar", "javor"]

Tehnički podaci Komentar statusa specifikacije
ECMAScript najnoviji nacrt (ECMA-262)
Nacrt
ECMAScript 2015 (6. izdanje, ECMA-262)
Definicija "operatora brisanja" u toj specifikaciji.
Standard
ECMAScript 5.1 (ECMA-262)
Definicija "operatora brisanja" u toj specifikaciji.
Standard
ECMAScript 1. izdanje (ECMA-262)
Definicija "operatora brisanja" u toj specifikaciji.
Standard Početna definicija. Implementirano u JavaScriptu 1.2.
Kompatibilnost preglednika

Tablica kompatibilnosti na ovoj stranici generirana je iz strukturiranih podataka. Ako želite doprinijeti podacima, pogledajte https://github.com/mdn/browser-compat-data i pošaljite nam zahtjev za povlačenje.

Ažurirajte podatke o kompatibilnosti na GitHubu

Mobilni poslužitelj za stolno računalo Chrome Edge Firefox Internet Explorer Opera Safari Android webview Chrome za Android Firefox za Android Opera za Android Safari na iOS-u Samsung Internet Node.jsizbrisati
Puna podrška za Chrome 1Edge Potpuna podrška 12Firefox Puna podrška 1IE Potpuna podrška 4Opera Potpuna podrška DaSafari Potpuna podrška DaWebView Android Puna podrška 1Chrome Android Puna podrška 18Firefox Android Puna podrška 4Opera Android Puna podrška DaSafari iOS Puna podrška DaSamsung Internet Android Puna podrška 1.0nodejs Puna podrška Da
Legenda Puna podrška Puna podrška Bilješke za različite preglednike

Iako ECMAScript čini redoslijed ponavljanja implementacije objekata ovisnim, može se činiti da svi glavni preglednici podržavaju redoslijed ponavljanja temeljen na najranije dodanom svojstvu koje dolazi prvo (barem za svojstva koja nisu na prototipu). Međutim, u slučaju Internet Explorera, kada netko koristi delete na svojstvu, dolazi do zbunjujućeg ponašanja, sprječavajući druge preglednike da koriste jednostavne objekte kao što su objektni literali kao uređene asocijativne nizove. U Exploreru, dok im vrijednost je doista postavljeno na nedefinirano, ako se kasnije ponovno doda svojstvo s istim imenom, svojstvo će se ponoviti u svom star poziciju--ne na kraju niza ponavljanja kao što bi se moglo očekivati ​​nakon brisanja svojstva i ponovnog dodavanja.



Kako ukloniti određeni element iz niza u JavaScriptu? (20)

Imam niz cijelih brojeva i koristim metodu .push() za dodavanje elemenata u njega.

Postoji li jednostavan način za uklanjanje određenog elementa iz niza? Ekvivalent nečemu poput array.remove(int); ,

trebao bih koristiti baza JavaScript - nikakav okviri nisu dopušteni.

ES6 i bez mutacije: (listopad 2016.) const removeByIndex = (list, index) => [ ...list.slice(0, index), ...list.slice(index + 1) ];

RemoveByIndex(,1) //=>

Uređeno u listopadu 2016
  • Neka bude jednostavno, intuitivno i eksplicitno (https://en.wikipedia.org/wiki/Occam%27s_razor)
  • Neka bude nepromjenjiv (izvorni niz će ostati nepromijenjen)
  • Učinite to sa standardnim JS funkcijama, ako ih vaš preglednik ne podržava - koristite polifill

U ovom primjeru koda koristim funkciju "array.filter(...)" za uklanjanje nepotrebnih elemenata iz niza, ova funkcija ne mijenja izvorni niz i stvara novi ako vaš preglednik ne podržava ovu funkciju (na primjer, IE prije verzije 9 ili Firefox prije verzije 1.5), razmislite o korištenju filtra polyfill iz Mozille.

Uklanjanje stavke (ECMA-262 Edition 5 kod aka oldstyle JS) var value = 3 var arr = arr = arr.filter(function(item) ( return item !== value )) console.log(arr) // [ 1 , 2, 4, 5 ] Uklanjanje stavke (ES2015 kod) let value = 3 let arr = arr = arr.filter(item => item !== value) console.log(arr) // [ 1, 2, 4 , 5 ]

VAŽNO ES2015 Sintaksa funkcije strelice "() => ()" uopće nije podržana u IE, Chrome prije verzije 45, Firefox prije verzije 22, Safari prije verzije 10. Za korištenje ES2015 sintakse u starijim preglednicima možete koristiti BabelJS

Uklanjanje više stavki (ES2016 kod)

Dodatna prednost ove metode je da možete ukloniti više elemenata

Neka forDeletion = neka arr = arr = arr.filter(item => !forDeletion.includes(item)) // !!! U nastavku pročitajte o podršci array.includes(...)!!! console.log(arr) // [ 1, 4 ]

VAŽNO "array.includes(...)" uopće nije podržan u IE, Chrome prije verzije 47, Firefox prije verzije 43, Safari prije verzije 9 i Edge prije verzije 14, dakle

Uklanjanje višestrukih elemenata (Advanced Experimental JavaScript ES2018?) // funkcija izvoza array-lib.js remove(...forDeletion) ( return this.filter(item => !forDeletion.includes(item)) ) // main.js import (ukloni) iz "./array-lib.js" let arr = // :: This-Binding Syntax Proposal // koristeći funkciju "remove" kao "virtualnu metodu" // bez proširenja Array.prototype arr = arr::remove (2, 3, 5) console.log(arr) // [ 1, 4 ]

Evo nekoliko načina za uklanjanje elementa iz niza pomoću koristeći JavaScript.

Sve opisane metode ne mijenjaju izvorni niz i umjesto toga stvaraju novi.

Ako znate indeks elementa

Recimo da imate niz i želite ukloniti element na poziciji i.

Jedan od načina je korištenje slice() :

const stavke = ["a", "b", "c", "d", "e", "f"] const i = 3 const filteredItems = items.slice(0, i-1).concat(items. slice(i, items.length)) console.log(filteredItems)

slice() stvara novi niz s indeksima koje prima. Jednostavno kreiramo novi niz - od početka do indeksa koji želimo obrisati, i spajamo drugi niz od prve pozicije nakon one koju smo izbrisali do kraja niza.

Ako znaš značenje

U ovom slučaju, jedna dobra opcija je korištenje filter() koji nudi više deklarativni pristup:

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

Ovo koristi ES6 funkcije strelica. Možete koristiti tradicionalne funkcije za podršku starijim preglednicima:

const stavke = ["a", "b", "c", "d", "e", "f"] const valueToRemove = "c" const filteredItems = items.filter(function(item) ( return item != = valueToRemove )) console.log(filteredItems)

ili možete upotrijebiti Babel i pretvoriti ES6 kod natrag u ES5 kako biste ga učinili čitljivijim za starije preglednike, ali upišite moderni JavaScript u svoj kod.

Uklanjanje više stavki

Što ako umjesto jednog elementa želite izbrisati više elemenata?

Pronađimo najjednostavnije rješenje.

Po indeksu

Možete jednostavno stvoriti funkciju i ukloniti elemente uzastopno:

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"] konzola. zapisnik (filtrirane stavke)

Po vrijednosti

Uključivanje možete potražiti unutar funkcije povratnog poziva:

const stavke = ["a", "b", "c", "d", "e", "f"] const valuesToRemove = ["c", "d"] const filteredItems = items.filter(item => !valuesToRemove.includes(item)) // ["a", "b", "e", "f"] console.log(filteredItems)

Izbjegavajte mijenjanje izvornog niza

splice() (ne treba ga brkati sa slice()) mijenja izvorni niz i treba ga izbjegavati.

Možete koristiti ES6.

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

["1", "2", "4", "5", "6"]

To možete jednostavno učiniti metodom filtra:

Funkcija remove(arrOriginal, elementToRemove)( return arrOriginal.filter(function(el)(return el !== elementToRemove)); ) console.log(remove(, 1));

Ovo uklanja sve elemente iz niza i također radi brže od kombinacije slice i indexOf

Nikada ne biste trebali mutirati niz niza. Zato što se protivi obrascu funkcionalnog programiranja. Možete stvoriti novi niz bez reference na niz koji želite izmijeniti pomoću filtra metode es6;

Var myArray = ;

Recimo da želite ukloniti 5 iz niza, možete to jednostavno učiniti ovako.

MyArray = myArray.filter(vrijednost => vrijednost !== 5);

Ovo će vam dati novi niz bez vrijednosti koju želite ukloniti. Dakle, rezultat će biti

; // 5 je uklonjeno iz ovog niza

Za daljnje razumijevanje možete pročitati MDN dokumentaciju o filtru Array.filter

Ako želite novi niz s uklonjenim pozicijama, uvijek možete ukloniti određeni element i filtrirati niz. Možda će biti potrebno proširiti objekt polja za preglednike koji ne implementiraju metodu filtra, ali dugoročno je lakše jer sve što radite je ovo:

Var my_array = ; izbrisati moj_niz; console.log(my_array.filter(function(a)(return typeof a !== "undefined";)));

Trebalo bi se prikazati

Ako imate složene objekte u nizu, možete li koristiti filtre? U situacijama kada $.inArray ili array.splice nisu tako jednostavni za korištenje. Pogotovo ako su objekti možda mali u nizu.

Na primjer, ako imate objekt s poljem Id i želite da se objekt ukloni iz niza:

This.array = this.array.filter(function(element, i) ( return element.id !== idToRemove; ));

Pronađite indeks elementa niza koji želite ukloniti, zatim uklonite taj indeks pomoću splice.

Metoda splice() mijenja sadržaj niza uklanjanjem postojećih elemenata i/ili dodavanjem novih elemenata.

var niz =; console.log(array) var index = array.indexOf(5); if (index > -1) ( array.splice(index, 1); ) // array = console.log(array);

Drugi parametar za spajanje je broj elemenata koje treba ukloniti. Imajte na umu da spajanje mijenja polje na mjestu i vraća novo polje koje sadrži uklonjene elemente.

Imate od 1 do 9 nizova i želite ukloniti 5 pomoću donjeg koda.

var numberArray = ; var newNumberArray = numberArray.filter(m => ( return m !== 5; )); console.log("novi niz, 5 uklonjeno", novi niz brojeva);

Ako želite koristiti više ex vrijednosti: - 1,7,8

var numberArray = ; var newNumberArray = numberArray.filter(m => ( return (m !== 1) && (m !== 7) && (m !== 8); )); console.log("novi niz, 5 uklonjeno", novi niz brojeva);

Ako želite ukloniti vrijednost niza u ex nizu:-

var numberArray = ; var removebleArray = ; var newNumberArray = numberArray.filter(m => ( return !removebleArray.includes(m); )); console.log("novi niz, uklonjen", novi niz brojeva);

uključuje podržanu vezu preglednika

Znam da već postoji mnogo odgovora, ali čini se da mnogi od njih kompliciraju problem. Evo jednostavnog, rekurzivnog načina za uklanjanje svih instanci ključa - pozovite sebe dok se ne pronađe indeks. Da, radi samo u preglednicima indexOf, ali je jednostavan i može se lako ispuniti.

Offline funkcija

Funkcija removeAll(niz, ključ)( var index = array.indexOf(key); if(index === -1) return; array.splice(index, 1); removeAll(array,key); )

Metoda prototipa

Array.prototype.removeAll = function(key)( var index = this.indexOf(key); if(index === -1) return; this.splice(index, 1); this.removeAll(key); )

Array.prototype.removeItem = function(a) ( for (i = 0; i< this.length; i++) { if (this[i] == a) { for (i2 = i; i2 < this.length - 1; i2++) { this = this; } this.length = this.length - 1 return; } } } var recentMovies = ["Iron Man", "Batman", "Superman", "Spiderman"]; recentMovies.removeItem("Superman");



reci prijateljima
Pročitajte također