:  Retur til startside  :  Til JavaScript startside

Globale objekt   Array

Erklæres med Ar = new Array();  //  uden at angive størrelse, den ændres opad når nødvendigt
eller med Ar = new Array(17)//  opret array med 17 elementer (der dog alle er "undefined")
eller med Ar = new Array(15, -22, "Olsen", 2*8+1, 8+1)  //  Lav en array med 5 elementer som anført
  :  Om arrays med en record-lignende struktur


var Ar = new Array(15, -22, "Olsen", 2*8+1, 8+1);       Ar.toString( ) =
var Ar2 = new Array('dig', 'og', 'mig') Ar2.toString( ) =
Ar.concat(Ar2).toString( ) = Ar.toString( ) =   ( altså uændret )
Ar.concat(Ar2).toString( ) = Ar.toString( ) =   ( altså uændret )
Ar.toString( ) =   ( altså uændret )
Ar.length =   Ar ejer variabel length = antal elementer
 
objekt Array ejer kun den éne variabel length, men mange metoder som jeg eksemplificerer nedenfor (med Ar og Ar1):
concat(string)Ar.concat(Ar2) =
Bagefter er Ar uændret  
join("char") Ar.join('A') =     Sætter elementerne sammen til en streng med A til adskillelse.
Giver mening med mellemrumstegn:   Ar.join(" ") =
Bagefter er Ar uændret  
join("") Ar.join() =     Mangler 'char' indsættes i stedet kommaer,   ligesom toString() :   Ar.toString() =
push(variabel)Ar.push(Ar2) =             og bagefter er
 Med Internet Explorer 6.0 står at Ar.toString() =   og det er jo forkert.
Det 6.te element ( Ar[ 5 ] ) er en array, den fjerner jeg igen:
pop( ) Ar.pop( ) =

Bagefter er Ar ÆNDRET  
 NB: Kun det bagerste element kan pop'es ,  pop( ) tager ingen parametre
reverse( ) Ar.reverse( ) =
Bagefter er Ar ÆNDRET  
shift( ) Ar.shift( ) =
Bagefter er Ar ÆNDRET  
slice(i) Ar.slice(3) =
Bagefter er Ar uændret  
slice(i,j) Ar.slice(2,3) =     fra index=2 til elementet før index=3
Bagefter er Ar uændret  
slice( i, j ):     Ar.slice(1,0) =      Ar.slice(1,1) =      Ar.slice(1,2) =      Ar.slice(1,3) =      Ar.slice(1,4) =      Ar.slice(1,5) =
Det er elementerne fra index i til index j-1
splice(index,antal [,værdi..] )Ar.splice(1,4,'Knudsen', 'Ida', 6, 7, 8, 9) =     Erstat elementer: 1.ste parameter (1) = Indes for 1.ste element der skal erstattes, 2.den paramerer (4) = antal elementer der skal erstattes,  Følgende parametre (valgfrie) er nye værdier for de elementer der skal erstattes. I eksemplet her erstatter 6, 7, 8 og 9 ikke noget men tilføjes i forlængelse af Ar, så nu er Ar.length =
Ar.splice(3,2,'Olga') =   Nu er index 3 = '6' erstattet med 'Olga', index 4 = '7' er fjernet, og index 5 = '8' er rykket ned på index 4's plads , så nu er Ar[4] =
Ar.splice(2,1) =   Fjerner 1 element fra index nr 2
Jeg omdefinerer Ar = new Array( )
sort( )Ar.sort( )=
Bagefter er Ar ÆNDRET  
Sorteringen er her sket efter Ansi-nummret som er tegnenes talværdi i tabellen
sort( strengsammenlign ) strengsammenlign( e1, e2 ) er en funktion til sammenligning af to elementer i arrayen,, her kaldet e1 og e2. Den skal returnere et negativt tal, hvis e1 kommer før e2, positivt hvis e1 kommer efter e2, og nul hvis de er ens.
Denne funktion må man selv programmere, det har jeg gjort, se bare :  
 Ar.sort(strengsammenlign)=
bagefter er Ar ÆNDRET  
Internet Explorer er svag, når det gælder om at sortere en array, Netscape og Firefox virker meget bedre. Nedenfor har jeg et indtastnings-testfelt hvor du kan forsøge at indtaste en array, de enkelte elementer skal adskilles med komma. Hvis du ikke har for mange elementer virker Internet Explorer, men hvis du indtaster (Blok ind, tast Ctrl-C, klik i feltet, tast Ctrl-V) :
Ærøskøbing,Aalborg, København, @mager, aabo, åbo, aaabe, Åabe, ørestad, Ørestad, Ougadugu, ægir, aabo, zzzz, zzz
så får du med Internet Explorer version 8 den ulidelige, sædvanlige hovskisnovski-meddelelse 'der opstod en fejl på siden'. Jeg kan ikke se anden forklaring end at I.Explorer ikke kan finde ud af at bruge mere end en lille del af hukommelsen og derfor let løber tør.
Med Netscape og Firefox virker det upåklageligt.
indtast Ar, de enkelte elementer adskildt med komma:
 
og klik her for at få den sortert med Ar.sort(strengsammenlign)
 

 
Man kan også definere array med en record-type struktur:
<script>
  function nyMand(alder, navn, drik){
    this.alder=alder
    this.navn=navn
    this.drik=drik }

  var ra= new Array(new nyMand(18, "Olga", "Whisky"), new nyMand(81, "Ole", "Cognac"));
  document.write("<table border=1>");
  document.writeln("<tr><td>alder</td><td> navn </td><td> drik </td></tr>");
  for (var i=0; i<ra.length; i++)
    document.writeln("<tr><td>"+ra[i].alder+"</td>"
                        +"<td>"+ra[i].navn+"</td>"
                        +"<td>"+ra[i].drik+"</td></tr>");
  document.writeln("</table>")
</script>

      ra er en normal array, men de enkelte elementer er arrays med en record-type struktur. Den slags array har ikke en veldefineret length:
    ra[1].length=     (og ikke 3)
    ra.length=
 
Functionen nyMand() ovenfor vil nogen opfatte som en objektdefinition af en ny type objekt ved navn nyMand. Det er et spørgsmål om ord, men berettiges af at man kan tilføje metoder. Her tilføjes metoden tilstreng():

function tilstreng(){ return this.navn+" er "+this.alder+" år gammel og drikker "+this.drik}

og i function nyMand(...) skal tilf›jes

    this.tilstreng=tilstreng    // bemærk at her skal ikke () efter tilstreng

Jeg udskriver nu ra med

<script>for (var j=0; j<ra.length; j++)
        document.writeln("<br>"+tilstreng(ra[i])) </script>