Black Friday = Pricewatch Bekijk onze selectie van de beste Black Friday-deals en voorkom een miskoop.
Toon posts:

[js] Arrays tov Objects

Pagina: 1
Acties:

Verwijderd

Topicstarter
Er is echt nergens een goede site te vinden over javascript. Zeker nu met dit (semi-)probleem.

Ik wil een multidimensional array opbouwen, zoals in PHP dynamisch kan. dat houd in dat indexen etc ook belangrijk zijn. Nu doe ik dit met (vet veel):

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
nieuwe_array["1"] = {
  'Kleur' : {
    1 : 'Groen',
    6 : 'Zwart'
  }, 'School' : {
    3 : 'Aap',
    2 : 'Mies',
    5 : 'Noot',
    4 : 'Zee'
  }
};

helaas een slechte indenting doordat de output van PHP komt.
Dit zijn objecten blijkbaar. Maar dat wil ik niet. Vast door mijn eigen onkunde, dat ik geen property terugkrijg.
Deze informatie zou in gewone Array's gestopt kunnen worden. Maar eindig ik dan met array[array2][array3][array4] = 'waarde' (honderden? keren) in js, of kan het ongeveer net zo eenvoudig als ik hierboven probeer?

  • Juup
  • Registratie: Februari 2000
  • Niet online
Wat is nu precies het probleem?
In javascript zijn hashes nu eenmaal Objects.

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:02

crisp

Devver

Pixelated

Je hebt in javascript zowel voor objecten als voor arrays een shorthand constructor, namelijk respectievelijk {} en [].

PHP kent geen verschil tussen associatieve arrays en indexed arrays. In javascript kan je het Array object ook wel associatief gebruiken, maar in dergelijke gevallen (voor 'hashmaps' bijvoorbeeld) verdient het toch de voorkeur om een Object te gebruiken. Objecten kan je itereren mbv de for-in constructie.

Intentionally left blank


Verwijderd

Topicstarter
crisp schreef op zondag 10 augustus 2008 @ 17:42:
Je hebt in javascript zowel voor objecten als voor arrays een shorthand constructor, namelijk respectievelijk {} en [].

... Objecten kan je itereren mbv de for-in constructie.
Ok. Dank je wel sort-of. Ik heb inderdaad mijn probleem dus niet echt gemeld zie ik net :S
Hoe tel je het aantal objecten (in een object)?
Ik bedenk me nu dan maar een tellertje++ in een for-in loop. Lijkt me niet echt de juiste oplossing trouwens.
offtopic:
Jullie waren zeer snel, en ik was food :X

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:02

crisp

Devver

Pixelated

JavaScript:
1
2
3
4
5
6
7
8
9
var myObject = {
  foo: 'bar',
  woei: 'blaat'
};
var propertyCount = 0;
for (var i in myObject)
  propertyCount++;

alert('myObject heeft ' + propertyCount + ' properties');

;)

Intentionally left blank


Verwijderd

Topicstarter
Toch wel dus. Tja ik geloof het wel verder dan :P Is er ergens een (goede) site met javascript syntax en functions uitleg? Of een goede tool om javascript mee te debuggen?
In ieder geval, hartelijk bedankt Crisp.

  • Blaise
  • Registratie: Juni 2001
  • Niet online
http://developer.mozilla.org/en/docs/JavaScript en de Firebug plugin in Firefox.

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 11-11 10:24

Bosmonster

*zucht*

Even quick en dirty kun je bijvoorbeeld zoiets doen om het jezelf iets makkelijker te maken (alhoewel, veel makkelijker wordt het er ook niet van eigenlijk ;)):

JavaScript:
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
function Hash (h) {
    h.length = function () {
        var l = 0;
        for (var i in this) {
            if ((typeof this[i]).toLowerCase() != 'function')
                l++;
        }
        return l;
    };

    h.addItem = function (n, v) {
        this[n] = v;
    };

    h.removeItem = function (n) {
        delete this[n];
    };

    return h;
}

var bla = Hash({
    x: 1,
    y: 2
});

bla.addItem ('z', '3');
bla.removeItem ('x');

//console.log(bla.length());
alert(bla.length());


Een van de voordelen van objecten tegenover bijvoorbeeld arrays, is dat ze wel goed werken in combinatie met JSON (zeker als je de communicatie met bijvoorbeeld PHP wilt kan dat handig zijn).

[ Voor 19% gewijzigd door Bosmonster op 11-08-2008 11:15 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:02

crisp

Devver

Pixelated

Bosmonster schreef op maandag 11 augustus 2008 @ 10:46:
Even quick en dirty kun je bijvoorbeeld zoiets doen om het jezelf iets makkelijker te maken (alhoewel, veel makkelijker wordt het er ook niet van eigenlijk ;)):
Q&D heeft ook zo z'n beperkingen natuurlijk:
JavaScript:
1
2
3
4
bla.addItem ('z', function() { });
bla.addItem ('length', function() { return 999; });
bla.addItem ('addItem', function() { alert('wtf?'); });
bla.addItem ('foo', 'bar');

;)
Een van de voordelen van objecten tegenover bijvoorbeeld arrays, is dat ze wel goed werken in combinatie met JSON (zeker als je de communicatie met bijvoorbeeld PHP wilt kan dat handig zijn).
Ik heb geen problemen met het werken met arrays in JSON vanuit PHP; je kan vrij eenvoudig checken of een PHP array een hashmap is of niet:
PHP:
1
2
3
4
5
6
7
8
9
10
function isHashMap($array)
{
    for ($i = 0, $c = count($array); $i < $c; $i++)
    {
        if (!isset($array[$i]))
            return true;
    }

    return false;
}

[ Voor 33% gewijzigd door crisp op 11-08-2008 11:54 ]

Intentionally left blank


  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 11-11 10:24

Bosmonster

*zucht*

crisp schreef op maandag 11 augustus 2008 @ 11:44:
Q&D heeft ook zo z'n beperkingen natuurlijk:
Daarom is het ook maar een Quick & Dirty voorbeeldje natuurlijk. Persoonlijk zou ik helemaal geen wrapper hanteren, geeft je meer beperkingen dan mogelijkheden. Al heb ik tegenwoordig prima Hashmap en Iterator functionaliteit tot mijn beschikking via jQuery.
Ik heb geen problemen met het werken met arrays in JSON vanuit PHP; je kan vrij eenvoudig checken of een PHP array een hashmap is of niet:
Wat ik bedoel is dat JSON geen associatieve arrays ondersteunt in javascript. Althans, dat heb ik nog met geen enkele JSON implementatie werkende gekregen. Bijvoorbeeld met de standaard JSON2.js van json.org:

JavaScript:
1
2
3
4
5
var blaat = [];
blaat['a'] = 'aa';
blaat['b'] = 'bb';
blaat['c'] = 'cc';
console.log(JSON.stringify(blaat));


werkt dus niet, maar zodra je een object gebruikt wel.

[ Voor 19% gewijzigd door Bosmonster op 11-08-2008 14:06 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:02

crisp

Devver

Pixelated

Wat ik bedoel is dat JSON geen associatieve arrays ondersteunt in javascript.
Dat moet je ook gewoon niet willen ;)

Intentionally left blank

Pagina: 1