[js] objects of array om data in te bewaren ?

Pagina: 1
Acties:
  • 172 views sinds 30-01-2008
  • Reageer

  • r0bert
  • Registratie: September 2001
  • Laatst online: 11-08 16:19
Ik wil een pagina maken die uit een .js filetje informatie uitleest en welke informatie vervolgens in een tabelletje geplaatst moet worden.

Het gaat om een stuk of 6 'velden' als naam, email en adres..

Nu moet ik alleen nog kiezen tussen het gebruiken van arrays of van objects.. zal dat nog een groot verschil maken of maakt dat niet zoveel uit, denken jullie ?

ps. de records moeten alfabetisch op naam gesorteerd worden.. weet niet of dat bij objects net zo makkelijk gaat als met arrays :?

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 12:42
Arrays. Waarom moeilijk als het simpel kan :?

  • r0bert
  • Registratie: September 2001
  • Laatst online: 11-08 16:19
Dat moeilijk valt wel mee..

Het gaat erom wat het snelste is en het meest praktisch (en het best compatible met verschillende browsers maar dat speelt nu nie)

Verwijderd

Een array is een object. En die is hier heel handig voor.

  • r0bert
  • Registratie: September 2001
  • Laatst online: 11-08 16:19
ik bedoel:
var aGegevens = new Array()
var aGegevens[0] = new Array('naam1','adres1','email1')

of

function gegevensVulleh(name,addr,mail) {
this.naam = name;
this.adres = addr;
this.mail = mail;
}

var aGegevens = new oGegevensVulleh('naam1','adres1','email1');

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

Tis dus precies hetzelfde..

Wat je zegt is moet ik:

A. Het kant-en-klare Array-object gebruiken

B. Moet ik zelf een Array-achtig object in elkaar knutselen

De objecten in je laatste optie moeten namelijk ook opgeslagen worden, waarschijnlijk in een Array.


Mijn voorkeur is overigens dus wel die laatste (de combinatie, das stuk netter dan een multi-dimensional array).

Maak een User-object ofzo en stop die in een Array. Dan krijg je iets als user[0].name, user[7].email, etc..

  • r0bert
  • Registratie: September 2001
  • Laatst online: 11-08 16:19
Hmm lijkt me idd ook het beste ..

Doe ik dat wel ..

Verwijderd

Op maandag 25 februari 2002 14:15 schreef r0bert het volgende:
Het gaat om een stuk of 6 'velden' als naam, email en adres..
Als het er nou 2 of 3 waren geweest had ik nog getwijfeld, maar bij 6 zeg ik zeker dat je zelf een objecte moet knutselen.
ps. de records moeten alfabetisch op naam gesorteerd worden.. weet niet of dat bij objects net zo makkelijk gaat als met arrays :?
Ja, dat gaat uitstekend, zolang de alle instanties van het object zelf in een array zijn gebundeld kun je daar de loeisnelle Array.sort() methode voor gebruiken :P

  • r0bert
  • Registratie: September 2001
  • Laatst online: 11-08 16:19
code:
1
2
3
4
5
6
7
8
9
10
11
12
function gegevensVulleh(addr,mail) {
    this.adres = addr;
    this.mail = mail;
}

var aGegevens = new Array();

aGegevens['robert'] = new gegevensVulleh('gaatjeniezoveelaan 23','wilde825@planet.nl');
aGegevens['henk'] = new gegevensVulleh('blaat 23','henkie@planet.nl');
aGegevens['fikkie'] = new gegevensVulleh('blaat 23b','henkielfikkie@planet.nl');

aGegevens.sort();

Dit gaat dus niet werken (beswel beetje logisch eigenlijk want hij sorteerd de waardes en niet de '"ids"'

Hoe lost ik dat op ? aGegevens.naam.sort(); werkt ook nie als ik 't script zo aanpas dat de namen in object.naam komen te staan ..

Verwijderd

Dit lijkt me beter:
code:
1
2
3
4
5
6
7
8
9
10
11
12
function gegevensVulleh(naam, addr,mail) {
    this.naam = naam;
    this.adres = addr;
    this.mail = mail;
}
var aGegevens = new Array();

aGegevens[
   new gegevensVulleh('robert','gaatjeniezoveelaan 23','wilde825@planet.nl'),
   new gegevensVulleh('henk','blaat 23','henkie@planet.nl'),
   new gegevensVulleh('fikkie', 'blaat 23b','henkielfikkie@planet.nl')
];

Je kunt met Array.sort() ook je eigen sorteerfunctie aanroepen:
code:
1
2
3
4
5
6
7
aGegevens.sort(objSort_naam);

function objSort_naam(n1, n2) {
   if(n1.naam < n2.naam) return -1;
   else if(n1.naam > n2.naam) return 1;
   else return 0;
}

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

Dan weer jammer dat JS niet een standaard toString() functie heeft voor objecten.. anders was dit geen probleem geweest..

this.toString=function(){
return this.naam;
}

Verwijderd

Op maandag 25 februari 2002 16:05 schreef Bosmonster het volgende:
Dan weer jammer dat JS niet een standaard toString() functie heeft voor objecten.. anders was dit geen probleem geweest..

this.toString=function(){
return this.naam;
}
Ik snap eigenlijk niet wat je hier bedoelt. Welk probleem?

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

In Java als je bijvoorbeeld gewoon een objectnaam aanroept, roept ie standaard de toString() methode aan van dat object. Standaard is die leeg, maar die kun je zelf vullen.

Javascript gebruikt voor die sort() functie ook gewoon de inhoud van de Array. Als dat strings zijn sorteert ie ze daarop, zijn dat objecten dan krijgt ie alleen [object] ofzo. Als JS nu ook standaard een toString() functie had zou je makkelijk objecten kunnen sorteren op een bepaalde eigenschap, bijvoorbeeld naam, op bovenstaande methode.

Snappie? Dan hoef je niet zelf een sort() functie te proggen, of genoodzaakt zijn Arrays te gebruiken waar je dat niet wilt.

Nu maakt het hier inderdaad niet zoveel uit, doordat ze er met die sort() functie al rekening mee gehouden hebben.. Maar het komt regelmatig voor dat ik deze functionaliteit mis..

  • r0bert
  • Registratie: September 2001
  • Laatst online: 11-08 16:19
Zelfs ik snap dat ;)

maar een paar andere dingetjes 'snap' ik niet.. (sorry dat ik zo lastig ben :) )

Hoe moet ik de object nu aanroepen ? aGegevens[0].naam werkt bijvoorbeeld niet..

En aGegevens.length doet 't ook nie ;(

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 29-08 19:47

Bosmonster

*zucht*

var aGegevens = new Array();
aGegevens[
new gegevensVulleh('robert','gaatjeniezoveelaan 23','wilde825@planet.nl'),
new gegevensVulleh('henk','blaat 23','henkie@planet.nl'),
new gegevensVulleh('fikkie', 'blaat 23b','henkielfikkie@planet.nl')
];
Dit klopt ook niet helemaal. Voeg eens samen in:
var aGegevens = new Array(
new gegevensVulleh('robert','gaatjeniezoveelaan 23','wilde825@planet.nl'),
new gegevensVulleh('henk','blaat 23','henkie@planet.nl'),
new gegevensVulleh('fikkie', 'blaat 23b','henkielfikkie@planet.nl')
);
Kleinigheidje wat betreft conventie trouwens: Objectnamen behoren te beginnen met een hoofdletter, net zoals 'Array'.

Verwijderd

Op maandag 25 februari 2002 16:32 schreef r0bert het volgende:
maar een paar andere dingetjes 'snap' ik niet.. (sorry dat ik zo lastig ben :) )

Hoe moet ik de object nu aanroepen ? aGegevens[0].naam werkt bijvoorbeeld niet..

En aGegevens.length doet 't ook nie ;(
Dat 'snap' ik ook niet! Heb je mijn suggesties gebruikt?

  • r0bert
  • Registratie: September 2001
  • Laatst online: 11-08 16:19
Argh! dom .. lag idd aan wat bosmonster zei ..
khad 't zelf niet eens gezien ..

het werkende scriptje nog even:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<html>

<body>

<script language="JavaScript" type="text/javascript">

function gegevensVulleh(naam, addr,mail) {
    this.naam = naam;
    this.adres = addr;
    this.mail = mail;
}

var aGegevens = new Array(
new gegevensVulleh('robert','gaatjeniezoveelaan 23','wilde825@planet.nl'),
new gegevensVulleh('henk','blaat 23','henkie@planet.nl'),
new gegevensVulleh('fikkie', 'blaat 23b','henkielfikkie@planet.nl')
);

aGegevens.sort(objSort_naam);
function objSort_naam(n1, n2) {
   if(n1.naam < n2.naam) return -1;
   else if(n1.naam > n2.naam) return 1;
   else return 0;
}

// namen op alfabetische volgorde in alertjes uitspugen 
for (i = 0; i < aGegevens.length; i++) {
    alert(aGegevens[i].naam);
}




</script>

</body>

</html>

Verwijderd

OOOOPS! Ik bedoelde:
code:
1
2
3
4
5
aGegevens = [
new gegevensVulleh('robert','gaatjeniezoveelaan 23','wilde825@planet.nl'),
new gegevensVulleh('henk','blaat 23','henkie@planet.nl'),
new gegevensVulleh('fikkie', 'blaat 23b','henkielfikkie@planet.nl')
];

:o :D
Pagina: 1