Toon posts:

[JS] Door een 2D array heen lopen

Pagina: 1
Acties:

  • JapyDooge
  • Registratie: juli 2002
  • Laatst online: 24-09 16:21
Ik heb me scheel geGoogled maar kom nergens tegen waarom onderstaande mis gaat.

JavaScript:
1
2
3
4
var Configurations=[c1=["NL Desktop","Default desktop NL"],c2=["BE Desktop","Default desktop BE"],c3=["UK Desktop","Default desktop UK"]];
for (Configuration in Configurations) {
   Alert(Configuration[0]);
}


In bovenstaand geval had ik een alertbox verwacht met 'NL Desktop', daarna een met 'BE Desktop' en daarna een met 'UK Desktop'.
Echter krijg ik 3 maal 'undefined'.

Laat ik de [0] weg in het Alert-statement dan krijg ik opeenvolgend 0, 1 en 2 te zien.

Waar ga ik de mist in? :D

@painkill hieronder: :F

  • painkill
  • Registratie: december 2007
  • Laatst online: 20-09 21:22

painkill

Pain(k)(ill)

Was dit nou nodig? :)

Nee, nu even serieus, ligt het niet aan de 0 in de laatste regel?

[Voor 67% gewijzigd door NMe op 03-11-2010 14:10]

Mijn SNES verzameling!


  • JapyDooge
  • Registratie: juli 2002
  • Laatst online: 24-09 16:21
painkill schreef op woensdag 03 november 2010 @ 14:06:
[mbr]Was dit nou nodig? :)[/]

Nee, nu even serieus, ligt het niet aan de 0 in de laatste regel?
Snap je hoe array's werken?
Die [0] geeft juist aan dat ik het eerste veld wil hebben :P

Daarnaast, als je heel m'n post leest, zie je dat ik zonder de [0] gewoon de ID's krijg van de velden.

  • NMe
  • Registratie: februari 2004
  • Laatst online: 24-09 13:16

NMe

Quia Ego Sic Dico.

edit:
*onzin*

Zie hieronder, je gebruikt for...in niet goed. :)

[Voor 87% gewijzigd door NMe op 03-11-2010 14:14]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • NetForce1
  • Registratie: november 2001
  • Laatst online: 24-09 07:00

NetForce1

(inspiratie == 0) -> true

JapyDooge schreef op woensdag 03 november 2010 @ 14:03:
Ik heb me scheel geGoogled maar kom nergens tegen waarom onderstaande mis gaat.

JavaScript:
1
2
3
4
var Configurations=[c1=["NL Desktop","Default desktop NL"],c2=["BE Desktop","Default desktop BE"],c3=["UK Desktop","Default desktop UK"]];
for (Configuration in Configurations) {
   Alert(Configuration[0]);
}


In bovenstaand geval had ik een alertbox verwacht met 'NL Desktop', daarna een met 'BE Desktop' en daarna een met 'UK Desktop'.
Echter krijg ik 3 maal 'undefined'.

Laat ik de \[0] weg in het Alert-statement dan krijg ik opeenvolgend 0, 1 en 2 te zien.

Waar ga ik de mist in? :D

@painkill hieronder: :F
Configuration is de key, je moet dus doen: alert(Configurations[Configuration][0]);
zie: https://developer.mozilla...rence/Statements/for...in

Overigens zijn je variabelen c1, c2 en c3 ook overbodig, je kunt je array dus zo opbouwen:
JavaScript:
1
2
3
4
5
var Configurations=[
  ["NL Desktop","Default desktop NL"],
  ["BE Desktop","Default desktop BE"],
  ["UK Desktop","Default desktop UK"]
];

[Voor 12% gewijzigd door NetForce1 op 03-11-2010 14:14]

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


  • JapyDooge
  • Registratie: juli 2002
  • Laatst online: 24-09 16:21
02:08 ele hm
ele ehm
ele javascript kent geen foreach
ele dus de Configuration is een int
ele for (Configuration in Configurations) { Alert(Configuration[0]);
ele }
ele zal i9ets als
ele for (Configuration in Configurations) { Alert(Configurations[Configuration][0]); }
ele moeten worden
02:09 ele pokes JapyDooge
02:10 JapyDooge hmmm
JapyDooge naja
ele werkt het? :+
02:11 JapyDooge alert(Configurations[Configuration][0]) dus
JapyDooge ofzo
JapyDooge even zien
ele ja dat zei ik toch?
JapyDooge ohja
JapyDooge ik las een ] verkeerd :') dacht dat je de [0] er in zette
JapyDooge _O_ ele _O_ tnx <333
Ongeveer tegelijk met jullie, danku danku danku allemaal O+ _O_

Edit: kleine toevoeging, ik had dus gedacht dat Configuration het veld Configurations[i] zou overnemen, teveel met array's in PHP gespeelt denk ik :P

[Voor 9% gewijzigd door JapyDooge op 03-11-2010 14:15]


  • Cyphax
  • Registratie: november 2000
  • Laatst online: 21:11

Cyphax

Moderator NOS
Firefox ondersteunt intussen blijkbaar zowaar for each-statements.
JavaScript:
1
2
3
4
5
            var Configurations=[c1=["NL Desktop","Default desktop NL"],c2=["BE Desktop","Default desktop BE"],c3=["UK Desktop","Default desktop UK"]];
            for each (Configuration in Configurations) 
            {
                alert(Configuration[0]);
            }

Bovenstaande code geeft het gewenste resultaat. 's Mij ook nieuw. :+

Saved by the buoyancy of citrus


  • NetForce1
  • Registratie: november 2001
  • Laatst online: 24-09 07:00

NetForce1

(inspiratie == 0) -> true

JapyDooge schreef op woensdag 03 november 2010 @ 14:14:
[...]

Edit: kleine toevoeging, ik had dus gedacht dat Configuration het veld Configurations[i] zou overnemen, teveel met array's in PHP gespeelt denk ik :P
Dat kan als je for each ... in gebruikt. Maar dat bestaat pas vanaf Javascript 1.6 (zie: https://developer.mozilla.../Statements/for_each...in)

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


  • Cyphax
  • Registratie: november 2000
  • Laatst online: 21:11

Cyphax

Moderator NOS
NetForce1 schreef op woensdag 03 november 2010 @ 14:18:
[...]

Dat kan als je for each ... in gebruikt. Maar dat bestaat pas vanaf Javascript 1.6 (zie: https://developer.mozilla.../Statements/for_each...in)
Toch bestaat het al meer dan 2,5 jaar, getuige deze blogpost
Maar for each gebruiken in arrays wordt wel weer afgeraden door Mozilla, array.forEach() is het alternatief.

[Voor 11% gewijzigd door Cyphax op 03-11-2010 14:24]

Saved by the buoyancy of citrus


  • Bosmonster
  • Registratie: juni 2001
  • Laatst online: 10-09 22:52

Bosmonster

*zucht*

NetForce1 schreef op woensdag 03 november 2010 @ 14:12:
[...]

Overigens zijn je variabelen c1, c2 en c3 ook overbodig, je kunt je array dus zo opbouwen:
JavaScript:
1
2
3
4
5
var Configurations=[
  ["NL Desktop","Default desktop NL"],
  ["BE Desktop","Default desktop BE"],
  ["UK Desktop","Default desktop UK"]
];
Kan wel, maar een associatieve array is eigenlijk gewoon een object:

JavaScript:
1
2
3
4
5
6
7
var Configurations = {
  'c1': ["NL Desktop","Default desktop NL"],
  'c2': ["BE Desktop","Default desktop BE"],
  'c3': ["UK Desktop","Default desktop UK"]
};

alert(Configurations['c2'][0]);
Cyphax schreef op woensdag 03 november 2010 @ 14:17:
Firefox ondersteunt intussen blijkbaar zowaar for each-statements.
JavaScript:
1
2
3
4
5
            var Configurations=[c1=["NL Desktop","Default desktop NL"],c2=["BE Desktop","Default desktop BE"],c3=["UK Desktop","Default desktop UK"]];
            for each (Configuration in Configurations) 
            {
                alert(Configuration[0]);
            }

Bovenstaande code geeft het gewenste resultaat. 's Mij ook nieuw. :+
De c1= etc doet hier feitelijk niks anders dan nutteloze variabelen registreren die niet gebruikt worden.

[Voor 34% gewijzigd door Bosmonster op 03-11-2010 14:25]


  • JapyDooge
  • Registratie: juli 2002
  • Laatst online: 24-09 16:21
Bedankt voor de tip :) echter aangezien hier intern alleen maar IE8 en ouder in gebruik is, zal dat vooralsnog geen optie worden ;)
Wikipedia: JavaScript

@NetForce, klopt, echter die c1/c2/c3 heb ik nodig om terug te verwijzen naar een andere tabel later.

[Voor 19% gewijzigd door JapyDooge op 03-11-2010 14:24]


  • NetForce1
  • Registratie: november 2001
  • Laatst online: 24-09 07:00

NetForce1

(inspiratie == 0) -> true

Bosmonster schreef op woensdag 03 november 2010 @ 14:23:
[...]


Kan wel, maar een associatieve array is eigenlijk gewoon een object:

JavaScript:
1
2
3
4
5
6
7
var Configurations = {
  'c1': ["NL Desktop","Default desktop NL"],
  'c2': ["BE Desktop","Default desktop BE"],
  'c3': ["UK Desktop","Default desktop UK"]
};

alert(Configurations['c2']\[0]);
Zeker, maar als je de array verder niet associatief gebruikt kun je de keys beter weghalen, scheelt weer in leesbaarheid en onderhoud.

TS blijkt de keys dus wel nodig te hebben, maar dat konden wij natuurlijk niet weten ;)
edit: toch niet dus ;)

[Voor 9% gewijzigd door NetForce1 op 03-11-2010 14:27]

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


  • JapyDooge
  • Registratie: juli 2002
  • Laatst online: 24-09 16:21
code:
1
2
3
4
5
var Configurations=[ 
  ["NL Desktop","Default desktop NL",1], 
  ["BE Desktop","Default desktop BE",2], 
  ["UK Desktop","Default desktop UK",3] 
];


Is het uiteindelijk geworden, idd netter, tnx :)
Anders moest ik die c er nog afpellen aangezien cijfer only niet mag :P

Jawel wel nodig, maar nu staan ze er achter :+

[Voor 21% gewijzigd door JapyDooge op 03-11-2010 14:29]


  • crisp
  • Registratie: februari 2000
  • Laatst online: 22:38

crisp

Devver

Pixelated

for-in gebruik je in javascript doorgaans om door eigenschappen van een object te itereren, voor een non-associatieve array kan je beter gewoon de numerieke indices gebruiken of [].forEach()

Die laatste is makkelijk te 'backporten' naar browsers die het niet ondersteunen:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
if (!Array.prototype.forEach)
{
    Array.prototype.forEach = function(func, obj)
    {
        for (var i = 0, l = this.length; i < l; i++)
        {
            if (i in this)
                func.call(obj, this[i], i, this);
        }
    }
}


(en als je vervolgens dan alsnog for-in gebruikt over een Array dan krijg je ook mooi een property 'forEach' terug :P)

Intentionally left blank


  • JapyDooge
  • Registratie: juli 2002
  • Laatst online: 24-09 16:21
Tnx crisp, ik zou het graag gebruiken maar het werkt al, don't touch it enzo :+
Wel een nette oplossing :) dankje :D
Pagina: 1


Nintendo Switch (OLED model) Apple iPhone 13 LG G1 Google Pixel 6 Call of Duty: Vanguard Samsung Galaxy S21 5G Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True

Tweakers maakt gebruik van cookies

Bij het bezoeken van het forum plaatst Tweakers alleen functionele en analytische cookies voor optimalisatie en analyse om de website-ervaring te verbeteren. Op het forum worden geen trackingcookies geplaatst. Voor het bekijken van video's en grafieken van derden vragen we je toestemming, we gebruiken daarvoor externe tooling die mogelijk cookies kunnen plaatsen.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Forum cookie-instellingen

Bekijk de onderstaande instellingen en maak je keuze. Meer informatie vind je in ons cookiebeleid.

Functionele en analytische cookies

Deze cookies helpen de website zijn functies uit te voeren en zijn verplicht. Meer details

janee

    Cookies van derden

    Deze cookies kunnen geplaatst worden door derde partijen via ingesloten content en om de gebruikerservaring van de website te verbeteren. Meer details

    janee