[js] Bestaat een array uit een array

Pagina: 1
Acties:

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 22-08 10:27

Kaastosti

Vrolijkheid alom!

Topicstarter
Ik ben bezig aan een javascript-based menu'tje voor op een website. Nou zijn deze dingen makkelijk te downloaden, alleen zijn die gebaseerd op vaste posities. Ik wil er dus eentje maken, waarbij het verandere van de fontgrootte in de browser effect heeft, en waarbij de positie van het gehele menu niet vastligt.

Inmiddels heb ik een idee, wat er ongeveer zo uit ziet:
code:
1
2
3
4
5
6
7
var menu = new Array();

menu[0] = new Array();
menu[0][0] = "0 0";
menu[0][1] = "0 1";

menu[1] = "1";

Wat me nou mooi lijkt, is dat ik bij ieder willekeurig array dmv script laat kijken of een array een sub-menu heeft. Bij bovenstaand voorbeeld wil ik bijvoorbeeld op scherm:
0 0
0 1
1
Is er een functie om te controleren of een bepaald veld in een array ook weer een array is?

En ja, ik begin net met javascript, heb alles op w3schools gelezen, op google gezocht en hier de search gebruikt :)

[ Voor 4% gewijzigd door Kaastosti op 09-04-2003 12:39 ]

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


  • MAZZA
  • Registratie: Januari 2000
  • Laatst online: 17-08 14:00

MAZZA

Barbie is er weer!


Verwijderd

Ik gebruik if(!x.length) waarbij x een string is of een array. In dit geval is het een string bij true en een array by false.

  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 22-08 10:27

Kaastosti

Vrolijkheid alom!

Topicstarter
Ah kijk eens aan :) Maar ze gebruiken er dus wel een aparte functie voor... niet ingebakken, bedankt!

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


Verwijderd

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
function dump(obj) {
   for (i in obj) {
      if (typeof obj[i] == 'object') {
         dump(obj[i]);
      } else {
         document.write(obj[i] + '<br />');
      }
   }
}

dump(menu);

Met [i]typeof[i] kun je opvragen van welk type een variabele is. In javascript is de grens tussen array en object erg vaag, een array heeft altijd een length property, een object hoeft dat niet per se te hebben, maar voor de rest kun je bijna altijd een array als een object beschouwen, en vice versa. De test op length is niet veilig, omdat je voor een object een length property kunt opgeven die gewoon niet klopt.

In jouw geval is het niet belangrijk om te weten of het een array of object is.

[ Voor 10% gewijzigd door Verwijderd op 09-04-2003 13:13 ]


  • Clay
  • Registratie: Oktober 1999
  • Laatst online: 22-06 13:51

Clay

cookie erbij?

Ik zou zeker in het geval van sub en subsub etc. menu's de array's in array's in array's overboord doen en naar een object based oplossing zoeken.

ala:
JavaScript:
1
2
3
4
5
menu = new Menu();
menu.createItem( ... )
   sub = menu.createSub( ... );
   sub.createItem( ... );
   // etc


dan enable je automagisch meteen oneindige sub's, en je code ziet er een stuk leesbaarder uit. 't is geen antwoord op je vraag natuurlijk :{ en ook om:
En ja, ik begin net met javascript, heb alles op w3schools gelezen, op google gezocht en hier de search gebruikt :)
kan ik me voorstellen dat dat wat (te) veel moeite kan gaan kosten, al weet ik je verdere script/prog achtergrond natuurlijk niet :)

Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin


  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 22-08 10:27

Kaastosti

Vrolijkheid alom!

Topicstarter
Ik heb ervaring met java, c++ en php, dus qua oop komt het iig wel goed. Alleen de syntax en ingebakken functies van javascript zijn mij nog totaal onbekend, dus ook hoe je bepaalde effecten/oplossingen bewerkstelligd :)

Object based lijkt me idd een hele mooie oplossing, alleen wordt dat weer flink puzzelen over hoe ik dat voor elkaar krijg :P iig bedankt voor de tip!

Ik krijg het volgende idee:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
class Menu
{
   function Menu(){}
   function createItem()
   {
      //hoe sla je dan op dat er een nieuwe item is?
   }
   function createSub()
   {
      //en hoe maak je op deze wijze onderscheid?
      //Sub met argumenten van de bijbehordende item e.d.?
   }
};


Dit is tenminste wat ik me dan voor de geest haal aan oo-achtig model :)
Wat is overigens de ubb tag voor javascript?

[ Voor 44% gewijzigd door Kaastosti op 09-04-2003 14:09 ]

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


  • Clay
  • Registratie: Oktober 1999
  • Laatst online: 22-06 13:51

Clay

cookie erbij?

[ code = js ] [ / code ] :)

classes heb je (helaas) nog niet in js. schijnt er wel aan te komen in de ecma standaard trouwens, en dan gaat dat idd werken. Ik heb een tijd geleden een tuto/crashcourse geschreven over OO in js. en op google is ook veel te vinden erover :) 't principe berust heel kort door de bocht op:

JavaScript:
1
2
3
4
5
6
function Obj () {
   this.opgeslagen = 'waarde';
}

obj = new Obj();
alert(obj.opgeslagen)

[ Voor 11% gewijzigd door Clay op 09-04-2003 14:48 ]

Instagram | Flickr | "Let my music become battle cries" - Frédéric Chopin


  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 22-08 10:27

Kaastosti

Vrolijkheid alom!

Topicstarter
Mjah ik heb er ook al iets over gevonden. Er bestaan idd geen classes, hiervoor gebruik je gewoon een function, waarin je andere functions definieerd. Ik heb het volgende nu (wat niet werkt)... meteen even die tag proberen:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
function Menu()
{
   function createItem()
   {
      document.write("createItem");
   }
   function createSub()
   {
      document.write("createSub");
   }
}
document.write("Done");


In mijn index.html (waarin ik de .js file include) doe ik dit:
JavaScript:
1
2
3
menu = new Menu();
menu.createItem();
menu.createSub();


Wat ik op scherm krijg is alleen 'Done'. Als foutmelding (lang leve de javascript console in Netscape) krijg ik 'Error: menu.createItem is not a function' eeeeh... de laatste keer dat ik keek had ik 'm toch echt als functie aangemaakt :)

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.


  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Dan vraag ik me af of je dit linkje van Clay wel doorgelezen hebt, want daar staat toch echt heel duidelijk in hoe je ermee moet werken :Y)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Kaastosti
  • Registratie: Juni 2000
  • Laatst online: 22-08 10:27

Kaastosti

Vrolijkheid alom!

Topicstarter
Ow whoops die had ik idd niet gezien :) nou ja.. wel gezien, maar niet gerealiseerd dat het een linkje was :P

Een vergissing is menselijk, maar om er echt een puinhoop van te maken heb je een computer nodig.

Pagina: 1