JavaScript-array tillÄter dig att koncernens vÀrderingar och iterera över dem. Du kan lÀgga till och ta bort arrayelement pÄ olika sÀtt. TyvÀrr finns det inte en enkel Array.ta bort metoden.
sÄ, Hur tar du bort ett element frÄn en JavaScript-array?,
istÀllet för en borttagningsmetod har JavaScript-matrisen en mÀngd olika sÀtt att rensa matrisvÀrden.
Du kan ta bort element frÄn slutet av en matris med pop, frÄn början med shift eller frÄn mitten med splice. Metoden JavaScript Array filter för att skapa en ny array med önskade objekt, ett mer avancerat sÀtt att ta bort oönskade element.,licitly ta bort arrayelement med Delete Operator
det finns olika metoder och tekniker som du kan anvĂ€nda för att ta bort element frĂ„n JavaScript – arrayer:
- pop – tar bort frĂ„n slutet av en Array
- shift – tar bort frĂ„n början av en Array
- splice-tar bort frÄn ett specifikt Arrayindex
- filter-lÄter dig programmatiskt ta bort element frÄn en array
Du kommer ocksÄ att lÀra dig nÄgra andra sÀtt du kan ta bort element frÄn en array som kanske inte Àr sÄ uppenbart, som med lodash.,
ta bort element frÄn slutet av en JavaScript-Array
JavaScript-Array element kan tas bort frÄn slutet av en array genom att stÀlla in lÀngdegenskapen till ett vÀrde mindre Àn det aktuella vÀrdet. Alla element vars index Àr större Àn eller lika med den nya lÀngden kommer att tas bort.
var ar = ; ar.length = 4; // set length to remove elements console.log( ar ); //
popmetoden tar bort det sista elementet i matrisen, returnerar elementet och uppdaterar lÀngdegenskapen. Pop-metoden Àndrar matrisen pÄ vilken den Äberopas, det betyder att till skillnad frÄn att anvÀnda radera det sista elementet tas bort helt och matrislÀngden minskas.,
var ar = ; ar.pop(); // returns 6 console.log( ar ); //
ta bort element frÄn början av en JavaScript-matris
hur tar du bort det första elementet i en JavaScript-matris?
shift-metoden fungerar ungefÀr som pop-metoden, förutom att den tar bort det första elementet i en JavaScript-array istÀllet för det sista.
det finns inga parametrar eftersom shift-metoden bara tog bort det första matriselementet. NÀr elementet tas bort flyttas de ÄterstÄende elementen ner.,
var ar = ; ar.shift(); // returns "zero" console.log( ar ); //
shift-metoden returnerar elementet som har tagits bort, uppdaterar indexerna för ÄterstÄende element och uppdaterar egenskapen lÀngd. Det Àndrar matrisen pÄ vilken den Äberopas.
om det inte finns nÄgra element, eller matrislÀngden Àr 0, returnerar metoden odefinierad.
anvÀnda skarv för att ta bort arrayelement i JavaScript
skarvmetoden kan anvÀndas för att lÀgga till eller ta bort element frÄn en array. Det första argumentet anger var du ska börja lÀgga till eller ta bort element. Det andra argumentet anger antalet element som ska tas bort., De tredje och efterföljande argumenten Àr frivilliga; de anger element som ska lÀggas till i matrisen.
hÀr anvÀnder vi splice-metoden för att ta bort tvÄ element frÄn position tre (nollbaserat index):
var arr = ; var removed = arr.splice(2,2);
en matris som innehÄller de borttagna elementen returneras med splice-metoden. Du kan se den borttagna matrisen innehÄller och den ursprungliga matrisen innehÄller de ÄterstÄende vÀrdena.
splice-metoden kan ocksÄ anvÀndas för att ta bort en rad element frÄn en array.,
var list = ; list.splice(0, 2); // Starting at index position 0, remove two elements and retains .
ta bort Matrisobjekt efter vÀrde med skarv
om du vet vilket vÀrde du vill ta bort frÄn en matris kan du anvÀnda splice-metoden. Först mÄste du identifiera indexet för mÄlobjektet. Du anvÀnder sedan indexet som startelement och tar bort bara ett element.
var arr = ; for( var i = 0; i < arr.length; i++){ if ( arr === 5) { arr.splice(i, 1); } } //=>
detta Àr ett enkelt exempel dÀr elementen Àr heltal. Om du har en rad objekt som du skulle behöva en mer sofistikerad rutin.
detta fungerar om du bara vill ta bort ett enda objekt., Om du vill ta bort flera objekt som matchar dina kriterier finns det en glitch.
eftersom objekten tas bort frÄn matrisen ökar indexet fortfarande och nÀsta objekt efter att ditt matchade vÀrde har hoppat över.
den enkla lösningen Àr att Àndra ovanstÄende exempel för att minska indexvariabeln sÄ att den inte hoppar över nÀsta objekt i matrisen.
var arr = ; for( var i = 0; i < arr.length; i++){ if ( arr === 5) { arr.splice(i, 1); i--; } } //=>
i det Ă€ndrade exemplet lade jag till 2 ytterligare 5 vĂ€rden i matrisen. Jag lade ocksĂ„ till ”i–;” efter skarvsamtalet.
nu nÀr du kör slingan kommer det att ta bort varje matchande objekt.,
Tack vare Kristian Sletten för att pÄpeka problemet med slingan hoppar över följande objekt.
anvÀnda metoden Array filter för att ta bort objekt efter vÀrde
till skillnad frÄn splice-metoden skapar filter en ny array. filter () muterar inte matrisen som det kallas, men returnerar en ny array.
filter() har en enda parameter, en Äteruppringningsmetod. à teruppringning utlöses nÀr filtermetoden itererar genom matriselementen. Det kommer att passera tre vÀrden till Äteruppringning: det aktuella vÀrdet eller elementet, det aktuella matrisindexet och hela matrisen.,
Äteruppringningsmetoden ska returnera antingen sant eller falskt. Det Àr ditt ansvar att testa vÀrdet (elementet) för att se om det uppfyller dina kriterier. Om det gör du kan ÄtervÀnda sant. Element som returnerar sant lÀggs till i den nya, filtrerade matrisen.
var array = ; var filtered = array.filter(function(value, index, arr){ return value > 5; }); //filtered => //array =>
Du bör notera att en ny matris med matchande vÀrden returneras. Den ursprungliga arrayen lÀmnas orörd. Jag tycker att det hÀr Àr anvÀndbart eftersom jag ofta vill behÄlla en original datakÀlla, men hÀmta delmÀngder baserat pÄ olika logiska uppsÀttningar.,
Lodash Array Remove Method
Ibland Àr verktygsbibliotek det bÀsta sÀttet att lösa mer komplexa problem. Lodash ger en rik uppsÀttning av array manipulation metoder, en Àr bort.
lodash remove-metoden fungerar ungefÀr som matrisfiltermetoden, men ungefÀr i omvÀnd ordning. Det sparar inte de ursprungliga matrisvÀrdena, men tar bort matchande element. Det returnerar matchande element som en ny array.
var array = ;var evens = _.remove(array, function(n) { return n % 2 === 0;});console.log(array);// => console.log(evens);// =>
gör en borttagningsmetod
som jag nÀmnde tidigare finns det ingen native Array.ta bort metoden., Lodash lodash-metoden löser detta problem, men du kanske inte alltid vill anvÀnda Lodash. Det betyder inte att du inte kan skapa en verktygsmetod. John Resig gav oss en modell att följa, men han utökade Matrisprototypen, vilket Àr en dÄlig idé.
istÀllet skapade jag en Array remove utility-metod som kan lÀggas till i ett helper-eller verktygsbibliotek. Liksom lodash ta bort metoden den första parametern Àr mÄlmatrisen. Den anvÀnder Array.filter för att returnera element som inte matchar ett vÀrde.
den hÀr metoden Àr enkel, den förutsÀtter enkla vÀrden som siffror eller strÀngar., Du kan Àndra den hÀr metoden för att anvÀnda en customcomparison-metod, men jag tror att det skulle vara lÀttare att bara anvÀnda filtermetoden direkt.
explicit ta bort arrayelement med Delete Operator
Du kan ta bort specifika arrayelement med Delete operator:
var ar = ; delete ar; // delete element with index 4 console.log( ar ); // alert( ar ); // 1,2,3,4,,6
anvÀndning av delete operator pÄverkar inte egenskapen lÀngd. Det pÄverkar inte heller indexen för efterföljande element. Matrisen blir gles, vilket Àr ett fint sÀtt att sÀga att det borttagna objektet inte tas bort men blir odefinierat. JÀmför med delete med splice-metoden som beskrivs nedan.,
delete-operatören Àr utformad för att ta bort egenskaper frÄn JavaScript-objekt, vilka arrayer Àr objekt.
anledningen till att elementet inte faktiskt tas bort frÄn matrisen Àr att delete-operatören handlar mer om att frigöra minne Àn att ta bort ett element. Minnet frigörs nÀr det inte finns nÄgra fler referenser till vÀrdet.
rensa eller ÄterstÀlla en JavaScript-Array
vad hÀnder om du vill tömma en hel array och bara dumpa alla dess element?
det finns ett par tekniker som du kan anvÀnda för att skapa en tom eller ny array.,
den enklaste och snabbaste tekniken Àr att stÀlla in en arrayvariabel till en tom array:
var ar = ;//do stuffar = ;//a new, empty array!
problemet som detta kan skapa Àr nÀr du har referenser till variabeln. Referenserna till denna variabel Àndras inte, de kommer fortfarande att hÄlla den ursprungliga matrisens vÀrden. Detta kan naturligtvis skapa en bugg.
detta Àr ett över förenklat exempel pÄ detta scenario:
var arr1 = ;var arr2 = arr1; // Reference arr1 by another variable arr1 = ; console.log(arr2); // Output
ett enkelt knep för att rensa en array Àr att stÀlla in dess lÀngdegenskap till 0.,
var ar = ;console.log(ar); // Output ar.length = 0;console.log(ar); // Output
en annan, typ av onaturlig teknik, Àr att anvÀnda skarvmetoden, som passerar matrislÀngden som den andra parametern. Detta kommer att returnera en kopia av de ursprungliga elementen, vilket kan vara praktiskt för ditt scenario.
var ar = ;console.log(ar); // Output ar.splice(0, ar.length);console.log(ar); // Output
de tvÄ sista teknikerna skapar inte en ny array, utan Àndrar matrisens element. Det betyder att referenser ocksÄ bör uppdateras.
det finns ett annat sÀtt, med ett tag slinga. Det kÀnns lite konstigt för mig, men samtidigt ser fint ut, sÄ det kan imponera pÄ nÄgra vÀnner!,
var ar = ;console.log(ar); // Output while (ar.length) { ar.pop(); }console.log(ar); // Output
inte ett sÀtt jag skulle gÄ om att rensa en JavaScript-array, men det fungerar och det Àr lÀsbart. Vissa prestanda test har ocksÄ visat att detta Àr den snabbaste tekniken, sÄ kanske det Àr bÀttre Àn jag ursprungligen trodde!
sammanfattning
Ta bort JavaScript-Matrisobjekt Ă€r viktigt för att hantera dina data. Det finns inte en enda ”ta bort” metod tillgĂ€nglig, men det finns olika metoder och tekniker som du kan anvĂ€nda för att rensa oönskade array objekt.
den hÀr artikeln har granskat dessa metoder och hur de kan anvÀndas., Du sÄg ocksÄ hur man skapar en hjÀlpmetod som gör att ta bort objekt frÄn en array lite enklare och konsekvent.
Tack vare Rob Sherwood för att pÄpeka nÄgra syntaktiska stavfel!