Avatar billede flemche Nybegynder
08. oktober 2014 - 15:29 Der er 11 kommentarer

Hvordan opretter man et tomt 2d array med ukendt længde.

Hejsa

Jeg vil gerne oprette et 2D array som er tomt og som ikke har nogen forud defineret længde.

Grunden er at jeg har nogle beregninger hvis længde kan varierer fra gang til gang.

Resultatet af disse beregninger skal stoppes ind I dette array.

eg ved at man på et 1D kan lave det med "var arrayA = []", men jeg er ikke sikker på hvordan det skal laved I 2D.

Et 2D array I JavaScript er jo et array med array's I .

/Flemming
Avatar billede Slater Ekspert
08. oktober 2014 - 18:37 #1
Det kan du ikke helt som du beskriver det, da Javascript ikke har definerede typer.

Du kan godt sige f.eks. var array1 = [[]];
- Men det sætter bare første index i den yderste array til at være en ny array, men index 1, 2 osv. er stadig ikke sat til noget, fordi Javascript ikke gennemtvinger samme type i alle indices.

I stedet er du nødt til hver gang du skal bruge den indre array at sætte den til en array. Altså noget i stil med:

var ar = [];

for (var i = 0; i < 10; i++)
{
  ar[i] = [];
 
  for (var j = 0; j < 10; j++)
  {
      ar[i][j] = j;
  }
}

console.log(ar);
Avatar billede flemche Nybegynder
09. oktober 2014 - 08:58 #2
Hmm, Okay

Men den counter "i/j<10" du sætter laver den ikke bare et matrix på 10 x 10 ??

For ideen var jo at jeg ikke kender størrelsen af matrixen på forhånd.
Avatar billede flemche Nybegynder
09. oktober 2014 - 12:28 #3
Jeg fandt dette på Stack Owerflow, men jeg kan ikke rigtig få det til at virke.

-----------------------------------------------------------------
For the general, 2d array case, I'd suggest:
1.
Create the "top" array, e.g.:
var i      // the first-order index in a
  , j      // the second order index in a
  , a = []

2.
Initialize array elements as needed. This is called lazy initialization, and, in this case, it simply involves testing that a[i] exists before we try to assign something to a[i][j], e.g.:
if (!a[i]) a[i] = []

In English the above statement reads: "If the i-th element of a is 'falsy', assign an empty array to the i-th element."

3.
Finally, assign the actual value to the multideminsional array:
a[i][j] = 'whatever'
Avatar billede Slater Ekspert
09. oktober 2014 - 14:10 #4
@2: Den laver et matrix på 10x10 fordi jeg har sat den til at gøre det for eksemplets skyld, men du kan jo ændre det til hvad som helst.

Pointen er, at du ikke skal køre dette fra starten og generere din array, men bare først sætte de indices når du skal bruge dem. Alle arrays er dynamisk størrelse i Javascript.

Dvs. hvis du pludselig finder ud af, at du skal bruge ar[5][8], uden at have brugt den array før, kan du bare gøre:

var ar[5] = [];
ar[5][8] = "value";
Avatar billede flemche Nybegynder
10. oktober 2014 - 10:19 #5
Okay, det er jeg næste med på  :o)
Har lige et par side spørgsmål

Hvis du bruger "ar[5][8] = "value";" vil den så oprette et nyt array I index 5 med 9 (0-8) felter I det Nye array ??

Ved du hvordan man så udvider et 2D matrix.
Normalt vil man jo bruge "push" funktionen på det 1D array, men hvordan gøres det på et 2D  ??

Beklager hvis jeg er lidt tung, men arrays er ikke lige mit ynglings felt  :o)

/Flemming
Avatar billede Slater Ekspert
11. oktober 2014 - 09:53 #6
Nej, alle arrays i Javascript er samtidig associative, dvs. nøglen kan frit sættes og behøver ikke engang være tal. ar[5][8] vil altså lave et array med to dimensioner, hvor kun nøgle 5 er sat i det ydre array og 8 i det indre. Nøglerne 0-7 findes ikke før du bruger dem.

Som en sidebemærkning er der også ofte en god idé at bruge for..in til at løbe gennem arrays i stedet for en standard for-løkke, fordi den tager højde for manglende nøgler.

Du kan stadig godt bruge push som før, du siger bare ar.push() for at sætte den ydre, og ar[ key ].push() for den indre.  Men det er ikke nødvendigt, du kan bare sætte værdierne direkte.
Avatar billede flemche Nybegynder
13. oktober 2014 - 15:08 #7
Det er bare super.
Mange tak for hjælpen.

Sendt et svar, så sender jeg point den anden vej.
Avatar billede Kerasit Nybegynder
15. december 2014 - 16:16 #8
Sikke da noget vrøvl.

Selvfølgelig kan man oprette et 2 dimensionelt array uden "værdi". Husk på at arrays reelt set blot er JavaScript objekter, hvorfor for eksempelvis dette er præcis det samme:

var myObj = [[]];

Det er ikke kønt, men det virker.
Avatar billede flemche Nybegynder
03. januar 2015 - 18:36 #9
Hej Kerasit

Tak for det ekstra input.
Avatar billede flemche Nybegynder
03. januar 2015 - 18:37 #10
@Viperine, du fik aldrig sendt dit svar ??
Avatar billede flemche Nybegynder
24. april 2015 - 10:40 #11
Jeg har ikke hørt fra Viperine så hvis Kerasit vil have point så skriv et svar ellers lukker jeg bare spørgsmålet.

/Flemming
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

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