JavaScript

Arrays i JavaScript

Variablerna vi hittills har gjort innehåller bara ett värde, på engelska kallas ibland den typen av variabler för scalars, men det är nästan alltid scalars men syftar på när man använder ordet variabel.

Du kan också göra en annan typ av variabel som innehåller flera alternativa värden, uppsättningar av värden.

Den typen av variabler kallas, med ett engelskt ord, för arrays (ibland försvenskat till "arrayer")

En array innehåller ju en uppsättning av värden, varje sådant värde i en array kallas ett element (ska inte blandas ihop med element i HTML). Till exempel skulle man kunna skapa en array-variabel som innehåller namnen på alla som någonsin varit medlemmar i bandet Motorhead

För att deklarera en array som en sådan använder du ordet Array (obs! stort A). Du kan också lägga till en siffra inom parentes. Siffran avser antalet element i arrayen.

var motorhead = Array(10);

Om du inte vet hur många element som ska vara med i arrayen kan du utelämna siffran.

var motorhead = Array();

Nu ska du fylla din array med element, på engelska kallas detta populating. När du fyller din array anger du inte bara värdet, utan också elementets index, ordningsnummer, du anger alltså var i ordningen ett visst element finns. Index skrivs inom hakparenteser ([]) på följande sätt:

array[index] = element;

Om vi ska börja fylla vår Motorhead-array är det väl lämpligt att placera Lemmy först:
motorhead[0] = "Lemmy";

Du kanske ser att första index inte är 1, utan 0. Så är det. JavaScript börjar räkna från 0, och inte från 1. Detta är någonting man behöver hålla i huvudet när man räknar saker i JavaScript, annars kan det lätt bli fel.

Hela arrayen, med alla tio personer som någonsin varit med i bandet Motorhead skulle kunna se ut så här:

var motorhead = Array(10);
motorhead[0]="Lemmy";
motorhead[1]="Phil";
motorhead[2]="Mikkey Dee";
motorhead[3]="Larry";
motorhead[4]="Lucas";
motorhead[5]="Philthy Phil";
motorhead[6]="Eddie";
motorhead[7]="Brian";
motorhead[8]="Würzel";
motorhead[9]="Pete";

När jag nu vill använda värdet på ett element i arrayen kan jag anropa det med arraynamnet[index]. Om jag vill ha en alertruta med namnet på Motorheads nuvarande trummis kan jag alltså skriva:

alert(motorhead[2])

Om du vill korta ned koden kan du sammanfatta din array enligt samma principer som du testat tidigare.

var motorhead = Array("Lemmy", "Phil", "Mikkey Dee", "Larry", "Lucas", "Philthy Phil", "Eddie", "Brian", "Würzel", "Pete");

Som du ser har jag inte skrivit in några indexsiffror. Detta kommer JavaScript sköta automatiskt om jag inte gjort det själv, Första värdet har index [0], andra värdet index [1], och så vidare. Jag anropar fortfarande Motorheads nuvarande trummis med motorhead[2].

Det går till och med att utelämna ordet Array. Om du lägger alla värden inom hakparenteser kommer JavaScript anta att det är en array du vill skapa:

var motorhead = ["Lemmy", "Phil", "Mikkey Dee", "Larry", "Lucas", "Philthy Phil", "Eddie", "Brian", "Würzel", "Pete"];

Naturligtvis kan du använda dig av alla tre datatyper, textsträngar, numeriska värden och booleska värden.

var foedd = Array(1945, 1961, 1963, 1949, 1950, 1954, 1950, 1956, 1949, 1951);

Du kan blanda alla tre datatyper:

var lemmy = Array("Kilmister", 1945, true);

Det går att använda en variabel som element i en array. Nedanstående ska ge värdet "Lemmy" till index [0] i arrayen motorhead

var namn = "Lemmy";
motorhead[0] = namn;

Ett element från en array kan också användas som element i en annan array.

var namn = Array("Phil", "Lemmy", "Mikkey Dee", "Larry", "Lucas", "Philthy Phil", "Eddie", "Brian", "Würzel", "Pete");
motorhead[0] = namn[1];

Där det första elementet i arrayen motorhead tilldelas värdet från det andra elementet i arrayen namn.

Faktum är att du också kan nästla arrayer, du kan alltså låta en hel array vara värdet till ett element i en annan array.

var lemmy = Array("Kilmister", 1945, true);
var motorhead = Array();
motorhead[0] = lemmy;

En array i en annan array innebär ju ett problem när man behöver hänvisa till ett visst värde, index [0] i arrayen motorhead är ju en hel array, men vi vill ju bara ha tag i ett element i den.

Lösningen på det problemet är att lägga till fler hakparenteser.

För att hitta Lemmys födelseår (index 1 i arrayen lemmy) i ovanstående exempel skriver vi: motorhead[0][1] (1945). Vill vi veta om Lemmy fortfarande är medlem i Motorhead skriver vi motorhead[0][2] (true) och vill vi veta hans efternamn motorhead[0][0] (Kilmister).

Som du ser kan det bli rörigt när det blir många olika element som ska förhållas till varandra och det kan bli svårt att hålla reda på alla olika indexssiffror. Som tur är finns det en till variant av arrayer i JavaScript, nämligen associativa arrayer .