Hvordan bestemme lengden på en javascript-matrise og mange flere funksjoner for å jobbe med dem. Fjerner fra en matrise

I denne leksjonen vil vi bli kjent med arrays, lære å lage dem, utføre operasjoner på elementene deres, og også se på de grunnleggende metodene og egenskapene som er tilgjengelige når du arbeider med dem.

Hva er en array i JavaScript?

En matrise er bestilt samling av verdier. Verdiene i denne samlingen kalles elementer. Hvert element i matrisen har sitt eget serienummer (nummer), som kalles indeks. Indeksene er nummerert fra 0.

Følgende figur viser en numerisk matrise som består av 5 elementer. Elementene i denne matrisen inneholder følgende data: 123 (indeks 0), 7 (indeks 1), 50 (indeks 2), -9 (indeks 3), 24 (indeks 4).

Opprette (erklære) en matrise

Å lage arrays i JavaScript gjøres vanligvis ved å bruke array bokstavelig.

En matriseliteral består av firkantede parenteser som inneholder en liste over elementer atskilt med komma.

For eksempel:

Var tom = ; // tomme array var tall = ; // numerisk matrise var arr = ; // array som inneholder ulike datatyper

Verdiene i en JavaScript-matrise trenger ikke å være av samme type. De. En matrise kan inneholde verdier av forskjellige datatyper.

Et spesifikt matriseelement får tilgang til av indeksen. Denne operasjonen kalles også indekseringsoperasjonen.

For eksempel:

// lag en matrise bestående av 3 elementer var smartphoneColors = ["Svart", "Hvit", "Grå"]; // vis i nettleserkonsollen verdiene til smarttelefonColors-array-elementene med indeksene 0 og 2 console.log("Verdi av smarttelefonColors-array-elementet med indeks 0: " + smartphoneColors); // "Verdien av smartphoneColors array-elementet med indeks 0: Black" console.log("Verdien av smartphoneColors array-elementet med indeks 2: " + smartphoneColors); // "Verdien av smarttelefonColors array-elementet med indeks 0: Grey" // endre verdien av smarttelefonColors array-elementet med indeks 1 til "Red" smartphoneColors = "Red"; // ["Svart", "Rød", "Grå"] // sett smarttelefonColors array-elementet med indeks 3 til verdien "Blue" smartphoneColors = "Blue"; // ["Svart", "Rød", "Grå", "Blå"]

Du kan bruke ikke bare statiske verdier, men også uttrykk som matriseelementverdier:

Var lengdeA = 7, breddeA = 5; var punkt = ;

Objekter kan brukes som matriseelementverdier.

Var-poeng = [ (x1: 5, y1: 3), (x1: 7, y1: 10), (x1: 12; y1: 0) ]; // array bestående av 3 objekter

En annen måte å lage en matrise på består av å kalle opp Array-konstruktørfunksjonen.

Et konstruktørfunksjonskall uten argumenter brukes til å lage en tom matrise.

Var tomme = new Array(); // tom matrise

Denne metoden for å lage en matrise tilsvarer en bokstavelig.

Hvis du spesifiserer et tall som et argument til konstruktørfunksjonen, vil det lage en matrise som vil bestå av det angitte antallet elementer. Dessuten vil alle disse elementene ha udefinert verdi.

Var arr = ny Array(5); // array bestående av 5 elementer (elementverdier er udefinerte)

Hvis du sender flere verdier eller én ikke-numerisk verdi til konstruktørfunksjonen i parentes, vil den lage en matrise fra argumentene som sendes til den.

I motsetning til mange andre programmeringsspråk, endrer arrays i JavaScript automatisk størrelsen, dvs. de er iboende dynamiske. Slike arrays trenger ikke gis noen dimensjoner. Et annet særtrekk ved JavaScript-matriser er at forskjellige elementer i samme matrise kan inneholde forskjellige typer data.

length-egenskap (arraylengde)

Bestemmelse av lengden på matrisen (antall elementer) gjøres ved å bruke egenskapen length.

//opprett en matrise ved å liste verdiene til elementene i Array-funksjonen var volumeHDDs = new Array("500Gb","1Tb","2Tb"); //tilordne lengthArray-variabelen til lengden på volumeHDs-matrisen var lengthArray = volumeHDDs.length;

Hvordan få det første elementet i en matrise

Å få verdien til det første elementet i en matrise gjøres ved å spesifisere tallet 0 i hakeparenteser for denne matrisen:

//opprette en matrise bestående av 3 elementer var volumeHDDs = new Array("500Gb","1Tb","2Tb"); //hente verdien av det første elementet i matrisen var firstValue = volumeHDDs;

Hvordan få tak i det siste elementet i en matrise

Verdien til det siste elementet i en matrise oppnås ved å spesifisere uttrykket matrise_navn.lengde-1 i hakeparenteser for denne matrisen:

//opprette en matrise bestående av 3 elementer var volumeHDDs = new Array("500Gb","1Tb","2Tb"); //henter verdien av det siste elementet i matrisen var lastValue = volumeHDDs;

Iterering over en matrise

Iterering gjennom array-elementer gjøres ved å bruke en for-løkke.

La oss for eksempel iterere gjennom alle elementene i matrisen og vise verdiene deres i nettleserkonsollen (F12):

//opprette et arraynavnStudenter, bestående av 4 elementer var nameStudents = new Array("Petya","Vasya","Kolya","Maxim"); //iterate matriseelementer fra 0 til matriselengde-1 for (var i=0; i<= nameStudents.length-1; i++) { console.log(i+1 + " элемент массива = " + nameStudents[i]); }

Hva er formålet med sletteoperatøren?

Slette-operatoren brukes ikke til å fjerne et element fra en matrise, men for å tildele verdien undefined til et gitt matriseelement.

Var namePlanets = new Array("Venus","Mercury","Earth","Mars"); slett navnPlanets; for (var i=0; i<= namePlanets.length-1; i++) { console.log(i + " элемент массива = " + namePlanets[i]); }

Funksjoner for arbeid med arrays (Array-objektmetoder)

Array-objektet inneholder følgende metoder (funksjoner) for å arbeide med matriser:

  • skifte
  • unshift
  • skive
  • skjøte
  • dele
  • omvendt

Push-metode (legge til et element på slutten av matrisen)

Push-metoden er utformet for å legge til et element på slutten av matrisen. Verdien til dette elementet er spesifisert som en parameter for denne metoden. Som et resultat returnerer push-metoden antall elementer i matrisen, tar hensyn til hva som ble lagt til.

Var namePlanets = ["Venus", "Mercury", "Earth", "Mars"]; namePlanets.push("Jupiter"); // 5 console.log(navnPlanets); // ["Venus", "Mercury", "Earth", "Mars", "Jupiter"]

pop-metoden (fjerner det siste elementet fra en matrise)

Pop-metoden er designet for å fjerne det siste elementet fra en matrise. Denne metoden har ingen parametere. Som et resultat returnerer den verdien til det siste (fjernede) elementet i matrisen.

Var namePlanets = ["Venus", "Mercury", "Earth", "Mars"]; navnPlanets.pop(); // "Mars" console.log(navnPlanets); // ["Venus", "Mercury", "Earth"]

Shift-metode (fjerner det første elementet fra en matrise)

Skiftmetoden er designet for å fjerne det første elementet fra arrayet, dvs. element som har indeks 0. Alle andre elementer i matrisen forskyves til begynnelsen, dvs. for hver av dem reduseres indeksen med 1. Denne metoden returnerer verdien av det fjernede elementet som et resultat.

Var namePlanets = ["Venus", "Mercury", "Earth", "Mars"]; navnPlanets.shift(); // "Venus" console.log(navnPlanets); // ["Mercury", "Earth", "Mars"]

unshift-metode (legge til et element i begynnelsen av matrisen)

Unshift-metoden er designet for å legge til et element i begynnelsen av matrisen (før andre elementer). Verdien til dette elementet er spesifisert som en parameter for denne metoden. Som et resultat returnerer denne metoden antall elementer i matrisen, tar hensyn til hva som ble lagt til.

Var namePlanets = ["Mercury", "Earth", "Mars", "Jupiter"]; namePlanets.unshift("Venus"); // 5 console.log(navnPlanets); // ["Venus", "Mercury", "Earth", "Mars", "Jupiter"]

skivemetode (kopiere en del av en matrise)

Slice-metoden er laget for å kopiere en del av en matrise. Den endrer imidlertid ikke den opprinnelige matrisen, men returnerer som et resultat en ny matrise bestående av de valgte elementene.

Skivemetoden har 2 parametere:

  • 1 parameter (påkrevd) - er ment å indikere indeksen til elementet som du skal begynne å kopiere elementer fra;
  • Parameter 2 (valgfritt) - er ment å indikere indeksen til elementet som det er nødvendig å kopiere til (i dette tilfellet er det ikke inkludert i den nye matrisen). Hvis du ikke spesifiserer det, vil elementer opp til slutten av den angitte matrisen bli kopiert.
var namePlanets = ["Venus", "Mercury", "Earth", "Mars", "Jupiter"]; var newNamePlanets = namePlanets.slice(2, 4); // ["Jorden", "Mars"]

Spleisemetode (endre innholdet i en matrise)

Spleisemetoden er designet for å endre innholdet i en matrise. Den kan brukes både til å legge til elementer i en matrise og til å fjerne dem.

Syntaksen til spleisemetoden er:

Array.splice(startIndex, deleteCount [, element1[, element2[, ...]]]); /* startIndex (obligatorisk) - startindeksen til elementet som skal begynne å endre matrisen fra. Hvis du angir et tall som er større enn lengden på matrisen som startIndex, vil startindeksen settes til slutten av matrisen. Hvis du angir et negativt tall som startIndex, vil startelementet telles fra slutten. deleteCount (obligatorisk) - et tall som indikerer hvor mange elementer som må slettes fra matrisen. Hvis elementer ikke må slettes fra matrisen, må deleteCount settes til 0. Etter dette må du spesifisere minst ett nytt element som skal legges til matrisen. Hvis du spesifiserer et tall som deleteCount som vil overstige antallet gjenværende elementer i matrisen, med start fra startIndex, vil de i dette tilfellet fortsatt bli slettet (dvs. alle elementene til slutten av matrisen, fra startindeksen) element1, element2, ... (valgfritt) - elementer som må legges til matrisen. */

Eksempler på bruk av skjøtemetoden.

Bruke spleisemetoden for å fjerne noen elementer fra en matrise.

Var namePlanets = ["Venus", "Mercury", "Earth", "Mars"]; navnPlanets.splice(2, 2); //["Jorden", "Mars"] console.log(navnPlanets); // ["Venus", "Mercury"]

Bruke spleisemetoden for å fjerne et element fra en matrise og legge til nye til det.

Var namePlanets = ["Venus", "Mercury", "Earth", "Mars"]; namePlanets.splice(1, 1, "Uranus", "Neptun", "Saturn"); // ["Mercury"] console.log(navnPlanets); // ["Venus", "Uranus", "Neptun", "Saturn", "Jorden", "Mars"]

Bruker skjøtemetoden kun for å legge til nye elementer i en matrise.

Var namePlanets = ["Jupiter", "Saturn", "Uranus"]; namePlanets.splice(0, 0, "Venus", "Mercury", "Earth", "Mars"); // console.log(navnPlanets); // ["Venus", "Mercury", "Earth", "Mars", "Jupiter", "Saturn", "Uranus"]

join-metoden (konvertere en matrise til en streng)

Sammenføyningsmetoden er designet for å slå sammen alle elementene i en matrise til en streng.

Bli med metodesyntaks:

Array.join(); /* separator (valgfritt) - en separator som brukes som en forbindelsesstreng mellom hvert matriseelement. Hvis denne parameteren ikke er spesifisert, vil "," bli brukt som tilkoblingsstreng. Hvis du spesifiserer en tom streng som en parameter, vil ikke array-elementene i den returnerte strengen bli atskilt med noe */

Var bær = ["Druer", "Druer", "Rips", "Rosen"]; var bærStr1 = bær.join(); // "Druer, druer, rips, nyper" var berriesStr2 = berries.join(""); // "GrapesGrapesCurrantRosehip" var berriesStr3 = berries.join(", "); // "Druer, druer, rips, nyper" var berriesStr4 = berries.join(" + "); // "Druer + druer + rips + nyper"

Hvis du bruker en ikke-streng som skilletegn, vil den bli konvertert til en streng.

Var bær = ["Druer", "Druer", "Rips", "Rosen"]; var bærStr1 = bær.join(false); // "GrapesfalseGrapesfalseCurrantfalseRosehip" var berriesStr2 = berries.join(4/2); // "Grapes2Grapes2Currant2Rose Hip" Array-elementer som har null eller udefinert som verdi, vil bli kastet til den tomme strengen. var arr = ; var arrStr = arr.join(", "); // "0, 5, -4"

Konvertere en streng til en matrise - delt

Splittmetoden er designet for å konvertere en streng til en matrise. Denne metoden har én parameter, som du kan spesifisere en streng, basert på hvilken denne strengen vil bli delt inn i en rekke strenger.

Var strElementComputers = "Systemenhet, Skjerm, Tastatur, Mus, Høyttalere, Skriver"; var elementComputers = strElementComputers.split(", "); console.log("Antall elementer i matrisen: " + elementComputers.length); for (var i=0; i<= elementComputers.length-1; i++) { console.log(i + " элемент массива = " + elementComputers[i]); }

Omorganisere array-elementer i omvendt rekkefølge - omvendt

Den omvendte metoden er utformet for å omorganisere array-elementer i omvendt rekkefølge.

Var namePlanets = new Array("Venus","Mercury","Earth","Mars"); namePlanets.reverse(); console.log("Antall elementer i matrisen: " + namePlanets.length); for (var i=0; i<= namePlanets.length-1; i++) { console.log(i + " элемент массива = " + namePlanets[i]); }

Sortering av array-elementer - sorter

Sorteringsmetoden brukes til å sortere matriseelementer. Som standard sorterer denne metoden matrisen som strenger.

Var namePlanets = new Array("Venus","Mercury","Earth","Mars"); navnPlanets.sort(); console.log("Antall elementer i matrisen: " + namePlanets.length); for (var i=0; i<= namePlanets.length-1; i++) { console.log(i + " элемент массива = " + namePlanets[i]); }

21.06.2017 kl 12:17

For å beregne størrelsen på en rekke objekter i JavaScript, bruk lengdeegenskapen til matrisen.

Var arr = ["første", "andre"]; console.log(arr.length); // 2

Arrays i javascript kan ha manglende indekser. For eksempel

Var arr = ; arr = "første"; arr = "andre";

Lengde-egenskapen returnerer den maksimale indeksen til matrisen + 1. dvs. i eksemplet gitt, lengde = 5.

Beregning av antall elementer i en matrise i javascript

Array.prototype.count = function())( var resultat = 0; for(var i = 0; i< this.length; i++) if (this[i] != undefined) result++; return result; }

Eksempel på bruk

Var arr = ; arr = "første"; arr = "andre"; console.log(arr.count()); //2

Du kan også tilordne en verdi til egenskapen length. Dette lar deg redusere lengden på en eksisterende matrise.

Var arr = ["første", "andre", "tredje"]; arr.lengde = 2; console.log(arr); // ["første sekund"]

Beregne størrelsen på en matrise i byte i javascript

Matriser er vanlige objekter, så å beregne størrelsen på en matrise i byte er ikke annerledes enn å beregne størrelsen på et hvilket som helst annet objekt. Dessverre gir ikke javascript et API for å beregne størrelsen, så du må beregne det selv. Dette gjøres som følger: vi går gjennom alle egenskapene til objektet; hvis egenskapen er av en primitiv type, legger vi til størrelsen på en forekomst av denne typen til det totale resultatet; hvis egenskapen inneholder et objekt, beregner vi rekursivt dens størrelse.

Funksjon sizeOf(obj) ( var bytes = 0; if(obj !== null && obj !== undefined) ( switch(typeof obj) ( case "number": bytes += 8; break; case "string": bytes += obj.length * 2; break; case "boolean": bytes += 4; break; case "object": for(var key in obj) ( bytes += sizeOf(obj); ) break; ) ) return bytes ; );

Metoden er ikke nøyaktig og har mange problemer - for eksempel er det en mulighet for å gå inn i en endeløs loop.

Siste oppdatering: 26.03.2018

Array-objektet representerer en matrise og gir en rekke egenskaper og metoder som vi kan manipulere matrisen med.

Initialisere en matrise

Du kan opprette en tom matrise ved å bruke firkantede parenteser eller matrisekonstruktøren:

Var-brukere = new Array(); var folk = ; console.log(brukere); // Array console.log(people); // Array

Du kan umiddelbart initialisere en matrise med et visst antall elementer:

Var-brukere = new Array("Tom", "Bill", "Alice"); var people = ["Sam", "John", "Kate"]; console.log(brukere); // ["Tom", "Bill", "Alice"] console.log(people); // ["Sam", "John", "Kate"]

Du kan definere en matrise og legge til nye elementer til den mens du går:

Var-brukere = new Array(); brukere = "Tom"; brukere = "Kate"; console.log(brukere); // "Tom" console.log(brukere); // udefinert

Det spiller ingen rolle at matrisen som standard opprettes med null lengde. Ved å bruke indekser kan vi erstatte et eller annet element i en matrise ved en bestemt indeks.

lengde

For å finne ut lengden på en matrise, bruk lengdeegenskapen:

Var frukt = new Array(); frukt = "epler"; frukt = "pærer"; frukt = "plommer"; document.write("I matrisen frukt " + fruit.length + " element:
"); for(var i=0; i< fruit.length; i++) document.write(fruit[i] + "
");

Faktisk vil lengden på matrisen være indeksen til det siste elementet pluss én. For eksempel:

Var-brukere = new Array(); // det er 0 elementer i arrayen brukere = "Tom"; brukere = "Kate"; brukere = "Sam"; for(var i=0; i

Nettleserutgang:

Tom Kate undefined undefined Sam

Til tross for at vi ikke la til elementer for indeksene 2 og 3, vil lengden på matrisen i dette tilfellet være tallet 5. Det er bare at elementer med indeksene 2 og 3 vil ha verdien undefined .

Kopierer en matrise. skive()

Kopiering av en matrise kan være grunt eller grunt (grunn kopi) og dyp (dyp kopi).

For grunn kopiering er det nok å tilordne en variabel verdien til en annen variabel som lagrer en matrise:

Var users = ["Tom", "Sam", "Bill"]; console.log(brukere); // ["Tom", "Sam", "Bill"] var people = users; // grunt kopierende folk = "Mike"; // endre det andre elementet console.log(users); // ["Tom", "Mike", "Bill"]

I dette tilfellet vil personvariabelen, etter kopiering, peke til samme matrise som brukervariabelen. Derfor, når du endrer elementene i mennesker, vil elementene i brukerne også endre seg, siden det faktisk er den samme matrisen.

Denne oppførselen er ikke alltid ønskelig. For eksempel vil vi at variablene skal peke på separate arrays etter kopiering. Og i dette tilfellet kan du bruke dyp kopiering ved å bruke slice()-metoden:

Var users = ["Tom", "Sam", "Bill"]; console.log(brukere); // ["Tom", "Sam", "Bill"] var people = users.slice(); // dypkopi folk = "Mike"; // endre det andre elementet console.log(users); // ["Tom", "Sam", "Bill"] console.log(people); // ["Tom", "Mike", "Bill"]

I dette tilfellet, etter kopiering, vil variablene peke på forskjellige arrays, og vi kan endre dem separat fra hverandre.

Slice()-metoden lar deg også kopiere deler av en matrise:

Var brukere = ["Tom", "Sam", "Bill", "Alice", "Kate"]; var people = users.slice(1, 4); console.log(mennesker); // ["Sam", "Bill", "Alice"]

Slice()-metoden sendes start- og sluttindeksene, som brukes til å hente verdier fra matrisen. Det vil si at i dette tilfellet går utvalget inn i den nye matrisen fra indeks 1 til indeks 4, ikke inkludert. Og siden matriseindeksering starter fra null, vil den nye matrisen inneholde det andre, tredje og fjerde elementet.

trykk()

Push()-metoden legger til et element på slutten av matrisen:

Var frukt = ; fruit.push("epler"); fruit.push("pærer"); fruit.push("plommer"); fruit.push("kirsebær","aprikos
"); document.write(frukt); // epler, pærer, plommer, kirsebær, aprikoser

pop()

Pop()-metoden fjerner det siste elementet fra matrisen:

Var frukt = ["epler", "pærer", "plommer"]; var lastFruit = frukt.pop(); // trekk ut det siste elementet fra arrayet document.write(lastFruit + "
"); document.write("I matrisen frukt " + fruit.length + " element:
"); for(var i=0; i ");

Nettleserutgang:

Plommer Fruktarrayen har 2 elementer: epler pærer

skifte()

Shift()-metoden henter og fjerner det første elementet fra matrisen:

Var frukt = ["epler", "pærer", "plommer"]; var firstFruit = fruit.shift(); document.write(firstFruit + "
"); document.write("I matrisen frukt " + fruit.length + " element:
"); for(var i=0; i ");

Nettleserutgang:

Epler Fruktarrayen har 2 elementer: pærer plommer

unshift()

Unshift()-metoden legger til et nytt element i begynnelsen av matrisen:

Var frukt = ["epler", "pærer", "plommer"]; fruit.unshift("aprikoser"); document.write(frukt);

Nettleserutgang:

Aprikoser, epler, pærer, plommer

Fjerne et element etter indeks. skjøte()

Metoden splice() fjerner elementer ved en bestemt indeks. For eksempel fjerning av elementer fra den tredje indeksen:

Var brukere = ["Tom", "Sam", "Bill", "Alice", "Kate"]; var slettet = brukere.splice(3); console.log(slettet); // [ "Alice", "Kate" ] console.log(users); // [ "Tom", "Sam", "Bill" ]

Slice-metoden returnerer de fjernede elementene.

I dette tilfellet skjer slettingen fra begynnelsen av matrisen. Hvis du passerer en negativ indeks, vil slettingen utføres fra slutten av matrisen. La oss for eksempel fjerne det siste elementet:

Var brukere = ["Tom", "Sam", "Bill", "Alice", "Kate"]; var slettet = brukere.splice(-1); console.log(slettet); // [ "Kate" ] console.log(users); // [ "Tom", "Sam", "Bill", "Alice" ]

En ekstra versjon av metoden lar deg spesifisere sluttindeksen for sletting. La oss for eksempel slette den første til tredje indeksen:

Var brukere = ["Tom", "Sam", "Bill", "Alice", "Kate"]; var slettet = brukere.splice(1,3); console.log(slettet); // [ "Sam", "Bill", "Alice" ] console.log(users); // [ "Tom", "Kate" ]

En annen versjon av skjøtemetoden lar deg sette inn nye elementer i stedet for slettede elementer:

Var brukere = ["Tom", "Sam", "Bill", "Alice", "Kate"]; var slettet = users.splice(1,3, "Ann", "Bob"); console.log(slettet); // [ "Sam", "Bill", "Alice" ] console.log(users); // [ "Tom", "Ann", "Bob", "Kate" ]

I dette tilfellet sletter vi tre elementer fra 1. til 3. indeks og setter inn to elementer i stedet.

concat()

Concat()-metoden brukes til å kombinere matriser:

Var frukt = ["epler", "pærer", "plommer"]; var grønnsaker = ["tomater", "agurker", "poteter"]; var produkter = frukt.concat(grønnsaker); for(var i=0; i< products.length; i++) document.write(products[i] + "
");

I dette tilfellet er det ikke nødvendig å kombinere bare arrays av samme type. Ulike typer er mulig:

Var frukt = ["epler", "pærer", "plommer"]; var priser = ; var produkter = frukt.concat(priser);

bli med()

join()-metoden slår sammen alle elementene i en matrise til én streng:

Var frukt = ["epler", "pærer", "plommer", "aprikoser", "fersken"]; var fruitString = fruit.join(", "); document.write(fruitString);

join()-metoden sendes separatoren mellom array-elementer. I dette tilfellet vil et komma og et mellomrom (", ") brukes som skilletegn.

sortere()

Sort()-metoden sorterer matrisen i stigende rekkefølge:

Var frukt = ["epler", "pærer", "plommer", "aprikoser", "fersken"]; frukt.sort(); for(var i=0; i< fruit.length; i++) document.write(fruit[i] + "
");

Nettleserutgang:

Aprikoser pærer fersken plommer epler

omvendt()

Reverse()-metoden reverserer matrisen bakover:

Var frukt = ["epler", "pærer", "plommer", "aprikoser", "fersken"]; fruit.reverse(); for(var i=0; i< fruit.length; i++) document.write(fruit[i] + "
");

Nettleserutgang:

Fersken aprikoser plommer pærer epler

I kombinasjon med sort()-metoden kan du sortere matrisen i synkende rekkefølge:

Var frukt = ["epler", "pærer", "plommer", "aprikoser", "fersken"]; fruit.sort().reverse(); for(var i=0; i< fruit.length; i++) document.write(fruit[i] + "
");

Nettleserutgang:

Epler plommer fersken pærer aprikoser

Finne et elements indeks

Metodene indexOf() og lastIndexOf() returnerer indeksen for den første og siste inkluderingen av et element i matrisen. For eksempel:

Var fruit = ["epler", "pærer", "plommer", "epler", "pærer"]; var firstIndex = fruit.indexOf("epler"); var lastIndex = fruit.lastIndexOf("epler"); var otherIndex = fruit.indexOf("kirsebær"); document.write(firstIndex); // 0 document.write(lastIndex); // 3 document.write(otherIndex); // -1

firstIndex har en verdi på 0 fordi den første inkluderingen av "epler"-linjen i matrisen er ved indeks 0, og den siste er ved indeks 3.

Hvis elementet ikke er i matrisen, returnerer i dette tilfellet metodene indexOf() og lastIndexOf() verdien -1.

hver()

Every()-metoden sjekker om alle elementene samsvarer med en bestemt betingelse:

Var-tall = [1, -12, 8, -4, 25, 42]; funksjon betingelse (verdi, indeks, matrise) ( var resultat = usann; if (verdi > 0) ( resultat = sant; ) returnerer resultat; ); var passert = tall.every(betingelse); document.write(bestått); // falsk

Every()-metoden sendes en funksjon som representerer betingelsen som en parameter. Denne funksjonen tar tre parametere:

Funksjonsbetingelse (verdi, indeks, matrise) ( )

Verdiparameteren representerer det gjeldende matriseelementet som itereres, indeksparameteren representerer indeksen til det elementet, og matriseparameteren sender en referanse til matrisen.

I denne funksjonen kan vi sjekke den beståtte elementverdien for samsvar med en betingelse. For eksempel, i dette eksemplet sjekker vi hvert element i matrisen for å se om det er større enn null. Hvis den er større, returnerer vi verdien true , det vil si at elementet oppfyller betingelsen. Hvis mindre, returner falsk - elementet oppfyller ikke betingelsen.

Som et resultat, når numbers.every(condition)-metoden kalles, itererer den gjennom alle elementene i tallarrayen og sender dem én etter én til betingelsesfunksjonen. Hvis denne funksjonen returnerer true for alle elementer, returnerer every()-metoden true. Hvis minst ett element ikke samsvarer med betingelsen, returnerer every()-metoden false .

noen()

Some()-metoden ligner på every()-metoden, bare den sjekker om minst ett element samsvarer med en betingelse. Og i dette tilfellet returnerer some()-metoden true . Hvis det ikke er noen elementer som samsvarer med betingelsen i matrisen, returneres false:

Var-tall = [1, -12, 8, -4, 25, 42]; funksjon betingelse(verdi, indeks, matrise) ( var resultat = usann; if (verdi === 8) ( resultat = sant; ) returner resultat; ); var passert = tall.noen(tilstand); // sant

filter()

Filter()-metoden, som some() og every() , godtar en betingelsesfunksjon. Men samtidig returnerer den en rekke av de elementene som oppfyller denne betingelsen:

Var-tall = [1, -12, 8, -4, 25, 42]; funksjon betingelse (verdi, indeks, matrise) ( var resultat = usann; if (verdi > 0) ( resultat = sant; ) returnerer resultat; ); var filteredNumbers = tall.filter(tilstand); for(var i=0; i< filteredNumbers.length; i++) document.write(filteredNumbers[i] + "
");

Nettleserutgang:

1 8 25 42

forEach() og map()

Metodene forEach() og map() itererer over elementer og utfører visse operasjoner på dem. For eksempel, for å beregne kvadratene av tall i en matrise, kan du bruke følgende kode:

Var-tall = [1, 2, 3, 4, 5, 6]; for(var i = 0; i "); }

Men ved å bruke forEach()-metoden kan du forenkle denne konstruksjonen:

Var-tall = [1, 2, 3, 4, 5, 6]; funksjon kvadrat(verdi, indeks, matrise) ( var resultat = verdi * verdi; document.write("Kvadraten til tallet " + verdi + " er " + resultat + "
"); ); tall.forHver(kvadrat);

ForEach()-metoden tar som en parameter den samme funksjonen, som når det itereres over elementer, sendes det gjeldende elementet som itereres og operasjoner utføres på det.

Map()-metoden ligner på forEach-metoden; den tar også som parameter en funksjon som utfører operasjoner på elementene i matrisen, men map()-metoden returnerer en ny matrise med resultatene av operasjoner på matriseelementene.

La oss for eksempel bruke kartmetoden til å beregne kvadratene av tall i en matrise:

Var-tall = [1, 2, 3, 4, 5, 6]; funksjon kvadrat(verdi, indeks, matrise) (returresultat = verdi * verdi; ); var squareArray = numbers.map(square); document.write(squareArray);

Funksjonen som sendes til map()-metoden mottar det gjeldende elementet som itereres, utfører operasjoner på det og returnerer en verdi. Denne verdien går deretter inn i den resulterende squareArray

I denne artikkelen skal vi se på standard JavaScript-matriser med numeriske indekser. Matriser er deklarert ved hjelp av firkantede parenteser:

var fruits = ["Eple", "Oransje", "Esel"]

For å trekke ut et element, plasser dets indeks i hakeparenteser. Første indeks 0:

var fruits = ["Eple", "Oransje", "Esel"] varsel(frukt) varsel(frukt) varsel(frukt)

Vi kan også få lengden på en JavaScript-matrise:

var fruits = ["Eple", "Oransje", "Esel"] alert(fruits.length)

Oops! Vi laget en matrise med to frukter og et esel. Nå må vi fjerne eselet.

pop og push-metoder

Pop-metoden i JavaScript fjerner et element fra en matrise og returnerer det.

Følgende eksempel viser hvordan "Esel" hentes fra en matrise:

var fruits = ["Apple", "Oransje", "Esel"] alert("Jeg fjerner "+fruits.pop()) // Nå har vi bare ["Apple","Orange"] varsel("Nå størrelsen på matrisen: "+fruits.length) // esel fjernet

Merk at pop endrer selve arrayet.

Pops motstykke er push-metoden, som legger til et element i en matrise. For eksempel glemte vi å legge til en fersken:

var fruits = ["Eple", "Oransje"] fruits.push("Peach"); // nå har vi ["Apple", "Oransje", "Fersken"] varsel("Siste element:"+frukt)

  1. Lag en rekke stiler med elementer " Jazz”, “Blues”;
  2. Legg til verdien " Rock'n'Roll«;
  3. Erstatt den andre verdien fra slutten med verdien " Klassisk". Du bør ende opp med en matrise: " Jazz”, ”Klassisk”, ”Rock'n'Roll" Koden skal fungere for en hvilken som helst matriselengde;
  4. Hent den siste verdien fra matrisen og vis den via varsel.

Løsning

// 1 var styles = ["Jazz", "Bluez"] // 2 styles.push("Rock"n"Roll") // or: styles = "Rock"n"Roll" // 3 styles = "Klassisk " // 4 alert(styles.pop())

Shift/unshift metoder

Shift/unshift-metodene fungerer på slutten av matrisen, men du kan også bruke shift for å flytte elementer opp ( den første verdien av matrisen fjernes ved å forskyve elementene). Unshift-metoden lar JavaScript legge til et element i en matrise fra slutten:

var fruits = ["Apple", "Orange"] var apple = fruits.shift() // nå har vi bare ["Orange"] fruits.unshift("Sitron") // nå har vi ["Sitron", " Orange"] alert(fruits.length) // 2

Både shift og unshift kan operere på flere elementer samtidig:

var fruits = ["Apple"] fruits.push("Orange","Peach") fruits.unshift("Ananas","Sitron") // nå ser matrisen slik ut: ["Pineapple", "Lemon", "Eple" ", "Oransje", "fersken"]

Selvadministrert oppgave

Skriv koden for å vise en tilfeldig verdi fra arr-arrayen via varsel:

var arr = ["Plum","Orange","Esel","Gulrot","JavaScript"]

Merk: Koden for å få et tilfeldig tall fra minimum til maksimum verdi (inkludert) er som følger:

var rand = min + Math.floor(Math.random()*(max+1-min))

Løsning

Vi må trekke ut et tilfeldig tall fra 0 til arr.length-1 (inkludert):

var arr = ["Plum","Orange","Esel","Gulrot","JavaScript"] var rand = Math.floor(Math.random()*arr.length) alert(arr)

Iterering over en matrise

I JavaScript gjøres iterasjon gjennom en matrise ved å bruke en for-løkke:

var fruits = ["Ananas", "Sitron", "Eple", "Oransje", "Fersken"] for(var i=0; i

Selvadministrert oppgave

Lag en funksjon finn(arr,verdi) som finner en verdi i en gitt matrise og returnerer dens indeks eller -1 hvis verdien ikke blir funnet.

For eksempel:

arr = [ "test", 2, 1.5, usann ] finn(arr, "test") // 0 finn(arr, 2) // 1 finn(arr, 1.5) // 2 finn(arr, 0) // -1

Løsning

En mulig løsning kan se slik ut:

funksjon finn(matrise, verdi) (for(var i=0; i

Men dette er feil fordi == ikke definerer forskjellen mellom 0 og usant.

Det er mer korrekt å bruke === når du arbeider med arrays i JavaScript. I tillegg inkluderer den nyeste ES5-standarden Array#indexOf-funksjonen. Med den kan vi definere en funksjon som dette:

funksjon finn(matrise, verdi) (if (array.indexOf) returner matrise.indexOf(verdi) for(var i=0; i

Enda smartere ville være å definere funn med en betingelse for å sjekke om indexOf-metoden eksisterer.

Selvadministrert oppgave

Lag en funksjon filterNumeric(arr) som tar en matrise og returnerer en ny matrise som bare inneholder de numeriske verdiene fra arr .

Et eksempel på hvordan dette skal fungere:

arr = ["a", 1, "b", 2]; arr = filterNumeric(arr); // nå arr =

Løsning

Løsningen er å iterere gjennom matrisen og legge til verdiene til en ny matrise hvis de er numeriske.

bli med og splitte

Noen ganger trenger du en rask måte å konvertere en JavaScript-matrise til en streng. Det er dette sammenføyningsmetoden er til for.

Den kobler sammen matrisen til en streng ved å bruke det gitte skilletegnet:

var fruits = ["Sitron","Eple","Oransje","Fersken"]; var str = fruits.join(", "); varsel(str);

Den omvendte konverteringen gjøres enkelt ved å bruke splittmetoden:

var fruits = "Eple, appelsin, fersken"; var arr = fruits.split(","); // arr inneholder nå ["Apple", "Orange", "Peach"] alert(arr);

Selvadministrert oppgave

Objektet inkluderer en className-egenskap, som inneholder klassenavnene, atskilt med mellomrom:

Skriv en funksjon addClass(obj, cls) som legger til klassen cls , men bare hvis den ikke eksisterer:

ddClass(obj, "ny") // obj.className="åpne meny ny" addClass(obj, "open") // ingen endringer (klassen eksisterer allerede) addClass(obj, "meg") // obj.className= "åpne menyen ny meg" alert(obj.className) //

Løsning

Du må dele klassenavnet og løkken i deler. Hvis klassen ikke blir funnet, blir den lagt til.

Løkken har blitt litt optimalisert for å øke ytelsen:

funksjon addClass(elem, cls) ( for(var c = elem.className.split(" "), i=c.length-1; i>=0; i--) ( if (c[i] == cls ) return ) elem.className += " "+cls ) var obj = ( className: "open menu" ) addClass(obj, "new") addClass(obj, "open") alert(obj.className) // open menu ny

I eksemplet ovenfor er variabelen c definert i begynnelsen av loopen og dens siste indeks er satt til i .

Selve løkken behandles i motsatt retning, og ender med betingelsen i>=0. Fordi i>=0 er raskere å sjekke enn i . Hva i JavaScript gjør søk i en matrise raskere.

Bruk av lengde for å trimme en matrise

Ved å bruke length-egenskapen kan du avkorte en matrise slik:

Du spesifiserer lengden og nettleseren trunkerer matrisen.

Array er et objekt, så hva betyr dette?

Faktisk, i JavaScript, er en Array et objekt, komplett med automatisk lengdeinnstilling og spesielle metoder.

Dette er forskjellig fra konseptet på andre språk, der matriser representerer et sammenhengende minnesegment. Dette er også forskjellig fra en kø eller stabel basert på koblede lister.

Ikke-numeriske matrisenøkler

Nøkler er tall, men de kan ha hvilket som helst navn:

arr = arr = 5 arr.prop = 10 // ikke gjør dette

I JavaScript er arrays hash-tabeller, som har ytelsesfordeler, men også visse ulemper.

For eksempel fungerer push/pop bare på de ytterste elementene i en array, så de er utrolig raske.

push fungerer bare med slutten:

var arr = ["Min", "array"] arr.push("noe") alert(arr) // string "array"

Shift/unshift-metodene er trege fordi de trenger å omnummerere hele matrisen. Skjøtemetoden kan også føre til at nummereringen endres:


Så shift/unshift er tregere enn push/pop. Jo større matrisen, desto lengre tid tar det JavaScript å sortere matrisen.

Selvadministrert oppgave

Hva blir resultatet? Hvorfor?

arr = ["a", "b"] arr.push(function() ( alert(this) )) arr() // ?

Løsning

Siden matriser er objekter, arr .. er faktisk et metodekall på et objekt som obj metode:

arr() // samme som arr() // syntaktisk feil, men konseptuelt det samme: arr.2() // omskrevet i samme stil som obj.method() denne = arr i dette tilfellet sendes til funksjonen, slik at innholdet i arr skrives ut. arr = ["a", "b"] arr.push(function() ( alert(this) )) arr() // "a","b",function

Sparsomme matriser, lengdebeskrivelse

Lengde-egenskapen lar deg ikke få størrelsen på en matrise i JavaScript, men den siste indeksen + 1. Dette er viktig når vi snakker om sparsomme matriser, med "hull" i indeksene.

I det følgende eksemplet vil vi legge til to elementer til de tomme fruktene , men lengdeverdien forblir 100 :

var fruits = // tomme array fruits = "Peach" fruits = "Apple" alert(fruits.length) // 100 (men det er bare 2 elementer i arrayet)

Hvis du prøver å sende ut en sparsom matrise, vil nettleseren returnere de manglende indeksverdiene som tomme elementer:

var fruits = // tomme array fruits = "Fersken" frukter = "Eple" varsel(frukt) //, Fersken, eple (eller noe sånt)

Men en matrise er et objekt med to nøkler. Manglende verdier tar ikke plass.

Sparse arrays oppfører seg rart når array-metoder brukes på dem. De har ingen anelse om at indekser mangler:

var fruits = fruits = "Peach" fruits = "Apple" alert(fruits.pop()) // pop "Apple" (til indeks 9) alert(fruits.pop()) // pop et uspesifisert element (til indeks 8) )

Prøv å unngå sparsomme matriser. Metodene deres vil uansett ikke fungere normalt. Bruk Objekt i stedet.

Fjerner fra en matrise

Som vi vet er arrays objekter, så vi kan bruke delete for å fjerne en verdi:

var arr = ["Gå", "til", "hjem"] slett arr // nå arr = ["Gå", udefinert, "hjem"] alert(arr) // ikke definert

Du kan se at verdien er fjernet, men ikke på den måten vi ønsker, fordi matrisen inneholder et uspesifisert element.

Slett-operatøren fjerner et nøkkel-verdi-par, og det er det. Siden matrisen bare er en hash, blir posisjonen til det fjernede elementet udefinert.

Oftest må vi fjerne et element uten å etterlate "hull" mellom indeksene. Det er en annen metode som vil hjelpe oss med dette.

skjøtemetode

Skjøtemetoden kan fjerne elementer og erstatte dem i flerdimensjonale JavaScript-matriser. Syntaksen er:

arr.splice(indeks, deleteCount[, elem1, ..., elemN])

Fjerner deleteCount-elementet fra indeks og setter deretter inn elem1, ..., elemN i stedet.

La oss se på noen eksempler:

var arr = ["Gå", "til", "hjem"] arr.splice(1, 1) // fjern 1 element som starter ved indeks 1 alert(arr.join(",")) // ["Go " , "hjem"] (1 element fjernet)

Så du kan bruke spleis for å fjerne ett element fra en matrise. Matriseelementnumrene forskyves for å fylle plassen:

var arr = ["Gå", "til", "hjem"] arr.splice(0, 1) // fjern 1 element, fra indeks 0 alert(arr) // "to" ble det første elementet

Følgende eksempel viser hvordan du erstatter elementer:

Skjøtemetoden returnerer en rekke fjernede elementer:

var arr = ["Gå", "til", "hjem", "nå"]; // remove the first 2 elements var removed = arr.splice(0, 2) alert(removed) // "Go", "to"<-- массив удаленных элементов splice может вставлять элементы, задайте 0 для deleteCount. var arr = ["Go", "to", "home"]; // со второй позиции // удаляем 0 // и вставляем "my", "sweet" arr.splice(2, 0, "my", "sweet") alert(arr) // "Go", "to", "my", "sweet", "home"

Denne metoden kan også bruke en negativ indeks, som telles fra slutten av matrisen:

var arr = // for element -1 (nest siste) // fjern 0 elementer, // og sett inn 3 og 4 arr.splice(-1, 0, 3, 4) alert(arr) // 1,2,3, 4.5

Selvadministrert oppgave

Objektet inneholder en className-egenskap, som inneholder klassenavnene, atskilt med mellomrom:

var obj = (klassenavn: "åpen meny")

Skriv en funksjon removeClass(obj, cls) som fjerner klassen cls hvis den er gitt:

removeClass(obj, "open") // obj.className="menu" removeClass(obj, "blabla") // ingen endringer (det er ingen klasse å fjerne)

Løsning

Du må dele klassenavnet i deler og gå gjennom disse delene. Hvis en treff blir funnet, fjernes den fra JavaScript-gruppen med objekter og legges deretter til på slutten.

La oss optimere dette litt:

funksjon removeClass(elem, cls) ( for(var c = elem.className.split(" "), i=c.length-1; i>=0; i--) ( if (c[i] == cls ) c.splice(i,1) ) elem.className = c.join(" ") ) var obj = ( className: "open menu" ) removeClass(obj, "open") removeClass(obj, "blabla") varsel (obj.className) // meny

I eksemplet ovenfor er variabelen c satt i begynnelsen av løkken og i er satt til den siste indeksen.

Selve sløyfen går i motsatt retning, og ender med betingelsen i>=0. Dette gjøres fordi i>=0 sjekkes raskere enn i . Noe som gjør søk etter eiendommer i c .

skivemetode

Du kan trekke ut deler av en matrise ved å bruke slice(begin[, end])-metoden: var arr = ["Hvorfor", "learn", "JavaScript"]; var arr2 = arr.slice(0,2) // tar 2 elementer, starter på 0 alert(arr2.join(", ")) // "Hvorfor, lær"

Vær oppmerksom på at denne metoden ikke endrer antall elementer i arrayet i JavaScript, men kopierer deler av den.

Du kan utelate det andre argumentet for å få alle elementene fra en bestemt indeks:

var arr = ["Hvorfor", "lære", "JavaScript"]; var arr2 = arr.slice(1) // tar alle elementer fra 1 alert(arr2.join(", ")) // "learn, JavaScript"

Metoden støtter negative indekser, akkurat som String#slice .

omvendt metode

En annen nyttig metode er omvendt. La oss si at jeg vil ha den siste delen av et domene som " com" fra " my.site.com" Slik gjør du det:

var domain = "my.site.com" var last = domain.split(".").reverse() alert(last)

Merk at JavaScript-matriser støtter en kompleks syntaks (reverse()) for å kalle en metode og deretter hente et element fra den resulterende matrisen.

Du kan opprette lengre samtaler som reverse() 0] arr.sort() alert(arr) // 1, 15, 2

Kjør koden ovenfor. Du får bestillingen 1, 15, 2. Dette er fordi metoden konverterer alt til en streng og bruker leksikografisk rekkefølge som standard.