Avatar billede rune.osterdal.com Nybegynder
02. oktober 2001 - 15:23 Der er 13 kommentarer og
3 løsninger

2 dimensionelt array

Jeg eksperimenterer lige lidt med 2 dimensionelle arrays. Har lavet følgende :

<html><head><title>2 dimensionelt array - eksempel</title>
<Script language=\"javascript\">
var info = new Array();
info[\'Brugerid\'] = new Array();
info[\'Fornavn\'] = new Array();
info[\'Efternavn\'] = new Array();
info[\'Brugerid\'][0] = \'AC\';
info[\'Brugerid\'][1] = \'PC\';
info[\'Fornavn\'][0] = \'Anders\';
info[\'Fornavn\'][1] = \'Peter\';
info[\'Efternavn\'][0] = \'Christensen\';
info[\'Efternavn\'][1] = info[\'Efternavn\'][0];
</script></head><body>
<table>
<script language=\"javascript\">
for (i=0; i<info.length; i++) {
    document.write(\"<tr><td>\" + info[i] + \" : </td>\");
    for (j=0; i<info[0].length; j++) {
        document.write(\"<td>\" + info[i][j] + \"</td>\");
    }
    document.write(\"</tr>\");
}
</script>
</table>
</body></html>

- bare for at sætte mig ind i præcis hvordan tingene hænger sammen. Hvad skal jeg gøre for at få det til at virke?
Avatar billede z42cool Nybegynder
02. oktober 2001 - 15:28 #1
Du indekserer forkert i din løkke, men jeg er ikke helt sikker på hvordan du vil organisere dine data. Ønske du et array fra 0..n der indeholder arrays med tre indgange (brugerid, fornavn og efternavn) eller ønske du et array men de tre indgange der hver især indeholder et array fra 0..n brugere?
Avatar billede nute Nybegynder
02. oktober 2001 - 15:28 #2
for å få det på det rene. Det er ingenting som heter multidomensjonelle arrays i Java(script). Det man bruker, er arrays i Arrays. Med andre ord, hvis du skal ha en \"2 dimensjonell\" array, så er du faktisk nødt til å opprette 3 arrays. En array som inneholder dine 2 \"dimensjoner\":

info = new Array(2);
brugernavn = new Array(1);
fornavn = new Array(1);
brukernavn[0] = \"test\";
fornavn[0] = \"test\";
info[0] = brugernavn;
info[1] = fornavn;

/nute
Avatar billede Slettet bruger
02. oktober 2001 - 15:29 #3
Prøv at sætte dette i <body>:

<script language=\"javascript\">
var info = new Array();
info[0] = new Array();
info[1] = new Array();
info[2] = new Array();
info[0][0] = \'AC\';
info[0][1] = \'PC\';
info[1][0] = \'Anders\';
info[1][1] = \'Peter\';
info[2][0] = \'Christensen\';
info[2][1] = info[2][0];

for (i in info) {
document.write(\"<tr><td>\" + info[i] + \" : </td>\");
for (j in info[i]) document.write(\"<td>\" + info[i][j] + \"</td>\");
document.write(\"</tr>\");
}
</script>

Er det det, du mener?
Avatar billede Slettet bruger
02. oktober 2001 - 15:34 #4
Det er meget smartere, når du arbejder med arrays og du skal bruge løkker, at bruge en for (x in y), ligesom i mit svar. Den gennemløber så alle posterne i arrayet og lægger en til x for hvert gennemløb!
Avatar billede z42cool Nybegynder
02. oktober 2001 - 15:35 #5
Når JavaScript nu tillader tekst indekserede arrays ville det da være rart at kunne sige...

<script language=\"JavaScript\">
function newUser(id, fnavn, enavn) {

}

var info = new Array();
info[0] = new Ar
</script>
Avatar billede jakoba Nybegynder
02. oktober 2001 - 15:37 #6
phoenixv >> den giver da vist fejl. for (i in info)  lister jo også  info.length.

rune >> du har kuk i de indexer du bruger i den indre løkke:
    for (j=0; i<info[0].length; j++) {
        document.write(\"<td>\" + info[i][j] + \"</td>\");
    }
bør være
    for (j=0; j<info[i].length; j++) {
        document.write(\"<td>\" + info[i][j] + \"</td>\");
    }
Avatar billede z42cool Nybegynder
02. oktober 2001 - 15:38 #7
Upsss.... Der skete sku\' noget mærkeligt!!!

Når JavaScript nu tillader tekst indekserede arrays ville det da være rart at kunne sige...

<script language=\"JavaScript\">
function newUser(id, fnavn, enavn) {
var a = new Array();
a[\"Brugerid\"] = id;
a[\"Fornavn\"] = fnavn;
a[\"Efternavn\"] = enavn;
return a;
}

var info = new Array();
info[0] = newUser(1, \"Anders\", \"And\");
info[1] = newUser(2, \"Mickey\", \"Mouse\");

for (i=0; i<info.length; i++) {
document.write(\"<tr><td>\" + info[i][\"Brugerid\"] + \"</td>\");
document.write(\"<td>\" + info[i][\"Fornavn\"] + \"</td>\");
document.write(\"<td>\" + info[i][\"Efteravn\"] + \"</td>\");
}
</script>

Det er selvfølgelig smag og behag, men ovenstående giver efter min bedste overbevisning lang mere læsbar kode.
Avatar billede Slettet bruger
02. oktober 2001 - 15:38 #8
jakoba>> Da jeg kørte den i IE5 virkede den nu OK, men jer er selvfølgelig ikke sikker på, om det er det optimale eller det, rune vil!

P.S. Vær venlige at kommentere http://www.eksperten.dk/spm/116170
Avatar billede jakoba Nybegynder
02. oktober 2001 - 15:42 #9
z42cool >> det kan man også

var info = new Array();
info[0] = new Array( \'AC\', \'PC\');
info[1] = new Array( \'Anders\', \'Peter\');
info[2[ = new Array( \'Christensen\', \'Christensen\');

er præcis det samme som:

var info = new Array();
info[0] = new Array();
info[1] = new Array();
info[2] = new Array();
info[0][0] = \'AC\';
info[0][1] = \'PC\';
info[1][0] = \'Anders\';
info[1][1] = \'Peter\';
info[2][0] = \'Christensen\';
info[2][1] = info[2][0];

mvh JakobA
Avatar billede jakoba Nybegynder
03. oktober 2001 - 03:21 #10
Man kan sågar gå et skridt videre:

var info = new Array(
              new Array( \'AC\', \'PC\'),
              new Array( \'Anders\', \'Peter\'),
              new Array( \'Christensen\', \'Christensen\')
                            );
Avatar billede z42cool Nybegynder
03. oktober 2001 - 10:43 #11
Jakoba>> Men så får du stadig tal indekserede arrays,  hvilket oftest er mest anvendeligt til rent sekventielle data. I dette tilfælde vil det være oplagt at have random-access til dataene og det kræver at du ved hvilke indeks der svarer til hvilke felter. Det kan naturligvis sagtens lade sig gøre med tal indekserede arrays, men er noget mere overskueligt med streng indeksering!
Avatar billede jakoba Nybegynder
03. oktober 2001 - 11:55 #12
Joe såmænd, men skulle vi så ikke tage skridtet fuldt ud og lave objekter af de enkelte records istedet for arrays?

function Person ( init, forn, efter ) {
    this.initialer = init;
    this.fornavn = forn;
    this.efternavn = efter;
    this fuldeNavn = new Function( \"return this.fornavn+\' \'+this.efternavn\" );
    return this;
}; //end Person ( string, string, string ) -> Person objekt

var info = new Array {
    new Person( \'AC\', \'Anders\', \'Christensen\' ),
    new Person( \'PC\', \'Peter\', \'Christensen\' )
                          ];

og så adressere med
alert(  info[0].initialer  );  // giver  AC
alert(  info[1].fuldeNavn()  ); // giver  Peter Christensen

mvh JakobA
Avatar billede jakoba Nybegynder
03. oktober 2001 - 12:06 #13
Ups.
    this fuldeNavn  ->  this.fuldeNavn
    new Array {  ->  new Array (
    ];  ->  );
tsk, tsk.
Avatar billede z42cool Nybegynder
03. oktober 2001 - 12:28 #14
Jakoba>> Jo, det ville da klart være at foretrække, mente bare det var lidt for off-topic i forhold til at rune var/er igang med multidimensionelle arrays :-)
Avatar billede jakoba Nybegynder
03. oktober 2001 - 13:24 #15
Just det :-))
Avatar billede rune.osterdal.com Nybegynder
02. november 2001 - 13:29 #16
Beklager ventetiden! (o;
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester