[JQ/JS]Lengte van een variable

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • BryanD
  • Registratie: September 2010
  • Laatst online: 24-07 15:06
Beste tweakers,
ik heb een (noob) vraagje m.b.t JavaScript en/of jQuery:

Ik heb het volgende stukje code:
code:
1
2
3
4
5
6
var variabelenaam = { 
  'item1' : 'dit is item 1',
  'item2' :  'dit is item 2',
'item 3': 'dit is item 3',
'item 4':'dit is item 4'
};


Nu wil ik graag weten hoe lang deze variabele is.
Echter werkt .length niet.
De variabele kan varieren van grote, (meer of minder items).
Wat ik dus (in het voorbeeld) terug krijgen wil is 4.
Echter als ik een item 5 er bij in zet wil ik (natuurlijk) 5 terug zien.
Hoe kan ik dit bereiken.

Excuses voor de noob vraag >.<.
B.v.d,

Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 14-09 18:40
Oftewel: hoe vind ik de lengte van een hash in JavaScript?

Ga dat maar eens opzoeken. :)

Raar dat je wel weet hoe het werkt, maar dat je de naam van het concept niet kent. ;)

[ Voor 35% gewijzigd door Jaap-Jan op 19-01-2011 12:20 ]

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Acties:
  • 0 Henk 'm!

Verwijderd

Begin met je te verdiepen in de juiste terminologie, dat zoekt een stuk makkelijker. Je bent nu op zoek naar het aantal properties van een object. Het aantal situaties waarin dat nodig is, is minimaal, dus ik denk dat je wat je tot nu toe hebt gemaakt gewoon beter moet programmeren.

Properties hebben normaal weinig met elkaar te maken, de enige situatie waarin ik me kan voorstellen dat je dit echt nodig heb is als je met reflection bezig bent. En ik hoop dat je dat niet bent.

Acties:
  • 0 Henk 'm!

  • BryanD
  • Registratie: September 2010
  • Laatst online: 24-07 15:06
Is al anders opgelost :)
alsnog dank heren en vooral jaap-jan, wist idd niet hoe dat hete :P

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Zo te zien ben je hier een object aan het misbruiken als associatief array. Zoals Cheatah al zegt kun je dat beter niet doen. :)

'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.


Acties:
  • 0 Henk 'm!

  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 01-08 10:05
JavaScript:
1
2
3
var c=0;
for(var x in object)
  c++;


Variable c bevat nu de som van het aantal properties in object.

[ Voor 35% gewijzigd door Gamebuster op 19-01-2011 13:12 ]

Let op: Mijn post bevat meningen, aannames of onwaarheden


Acties:
  • 0 Henk 'm!

  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 01-08 10:05
Jaap-Jan schreef op woensdag 19 januari 2011 @ 12:18:
Oftewel: hoe vind ik de lengte van een hash in JavaScript?

Ga dat maar eens opzoeken. :)

Raar dat je wel weet hoe het werkt, maar dat je de naam van het concept niet kent. ;)
Ik ken het concept ook, maar nooit van de term gehoort :p

Misschien omdat ik alles zelfstandig geleerd heb ipv op een opleiding.

Let op: Mijn post bevat meningen, aannames of onwaarheden


Acties:
  • 0 Henk 'm!

  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 01-08 10:05
NMe schreef op woensdag 19 januari 2011 @ 13:08:
Zo te zien ben je hier een object aan het misbruiken als associatief array. Zoals Cheatah al zegt kun je dat beter niet doen. :)
Waarom is dat slecht?

Let op: Mijn post bevat meningen, aannames of onwaarheden


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-09 08:45
Als je wilt weten wat de lengte is, is de keuze van je associatieve array/object niet de juiste.

Wat je beter kunt doen is een normale array met daarin objecten, aangezien je blijkbaar een verzameling items op wilt slaan. Dan kun je ook gewoon de length-property gebruiken.

[ Voor 10% gewijzigd door Bosmonster op 19-01-2011 13:27 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Onduidelijkheid. Zie ook http://www.quirksmode.org/js/associative.html. Ik vind dat een mooiere manier van hashes gebruiken. :)

Trouwens, als je wat toe te voegen hebt aan je posts dan kun je de edit-knop gebruiken. Ik wil het best negeren als er eens sporadisch een dubbelpost gemaakt wordt, maar drie onder elkaar gaat me toch wat te ver.

'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.


Acties:
  • 0 Henk 'm!

  • BryanD
  • Registratie: September 2010
  • Laatst online: 24-07 15:06
i.v.m. het besparen van het leed van de moderators wil ik graag een niet relevante vraag posten in dit topic dus bij deze:

Hoe kan ik van een element terug krijgen (jQuery) wat voor element het is?

voorbeeld:
code:
1
2
3
4
5
6
<div id="div1">
  <span class="span1"></span>
  <img class="img1"/>
  <div id="div2"></div>
  <span id="span2"></span>
</div>


jQuery
code:
1
var next = $("#div1").children(".span1").next();


Nou wil ik dus van het element next (<img class=""/>) weten dat het een img is..
Hoe kan ik dat voor me kaar boxen? Op de jquery site kon ik niet echt iets vinden en ik ben ook niet zeker hoe ik dit in google in voeren moet.

B.v.d heren,

Acties:
  • 0 Henk 'm!

Verwijderd

Gewoon leren programmeren. Daar hoort ook bij: debuggen, analyseren, documentatie lezen, etc.

Overigens is next() in jouw geval technisch gezien geen img element maar een text object met whitespace. Ga je gewoon verdiepen in de materie. jQuery is een library met handige functionaliteit maar werkt onder water ook gewoon met de DOM.

Acties:
  • 0 Henk 'm!

  • BryanD
  • Registratie: September 2010
  • Laatst online: 24-07 15:06
Heb het al voor mekaar:

(uitgaand van voorgaand voorbeeld)
code:
1
next.get(0).tagName;

geeft keurig IMG terug

Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
Gamebuster schreef op woensdag 19 januari 2011 @ 13:10:
JavaScript:
1
2
3
var c=0;
for(var x in object)
  c++;


Variable c bevat nu de som van het aantal properties in object.
Fout. Je houdt geen rekening met het prototype.

JavaScript:
1
2
3
var c = 0;
for(var x in object)
  if (object.hasOwnProperty(x)) c++;


En dat is dan ook gelijk waarom dit een slecht idee is, want hasOwnProperty is behoorlijk duur.
BryanD schreef op woensdag 19 januari 2011 @ 15:56:
i.v.m. het besparen van het leed van de moderators wil ik graag een niet relevante vraag posten in dit topic dus bij deze:

Hoe kan ik van een element terug krijgen (jQuery) wat voor element het is?
De is method, maar afhankelijk van wat je wilt doen, kun je mss. beter het volgende proberen:

JavaScript:
1
2
3
4
var next = $("#div1").children(".span1").next("img");
if (next.length) {
  /* ... */
}

Acties:
  • 0 Henk 'm!

Verwijderd

BryanD schreef op woensdag 19 januari 2011 @ 16:07:
Heb het al voor mekaar:

(uitgaand van voorgaand voorbeeld)
code:
1
next.get(0).tagName;

geeft keurig IMG terug
jQuery returned altijd als een set van elementen, ook al selecteer je er maar 1. Je kunt ze ook als array benaderen:
JavaScript:
1
jQuery('body')[0].tagName

Acties:
  • 0 Henk 'm!

  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 01-08 10:05
R4gnax schreef op donderdag 20 januari 2011 @ 09:21:
[...]


Fout. Je houdt geen rekening met het prototype.

JavaScript:
1
2
3
var c = 0;
for(var x in object)
  if (object.hasOwnProperty(x)) c++;

En dat is dan ook gelijk waarom dit een slecht idee is, want hasOwnProperty is behoorlijk duur.
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Object.prototype.size = function()
{
    var c=0;
    for(var x in this)
        c++;
    return c;
};

var variabelenaam = {
  'item1' : 'dit is item 1',
  'item2' :  'dit is item 2',
'item 3': 'dit is item 3',
'item 4':'dit is item 4'
};

console.log(variabelenaam.size());

output: 5

Ah. Weer wat geleerd.

[ Voor 50% gewijzigd door Gamebuster op 23-01-2011 21:11 ]

Let op: Mijn post bevat meningen, aannames of onwaarheden


Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
Irritant probleem niet waar? Hierom wordt er ook altijd gezegd dat het een slecht idee is om het prototype van Object (of Array) uit te breiden. Je kunt zelfs niet meer van een simpele for-in constructie uitgaan zonder de prototype chain te inspecteren.

Acties:
  • 0 Henk 'm!

  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 01-08 10:05
R4gnax schreef op zondag 23 januari 2011 @ 23:12:
[...]


Irritant probleem niet waar? Hierom wordt er ook altijd gezegd dat het een slecht idee is om het prototype van Object (of Array) uit te breiden. Je kunt zelfs niet meer van een simpele for-in constructie uitgaan zonder de prototype chain te inspecteren.
JavaScript:
1
2
3
4
5
6
7
8
9
10
Object.prototype.size = function()
{
    var c=0, x=null;
    for(x in this)
        c++;
    for(x in this.constructor.prototype)
        c--;
    return c;
};
console.log({a:1,b:2,c:3,d:4}.size());

output: 4

There, I Fixed It. 8)

Alleen alle andere for(... in ...) loops op Object's moeten nu rekening houden met prototypes- maar daar zal ik voortaan een gewoonte van maken.

[ Voor 12% gewijzigd door Gamebuster op 24-01-2011 00:28 ]

Let op: Mijn post bevat meningen, aannames of onwaarheden


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 10-09 08:45
Jij kunt daar wel rekening mee houden, maar het blijft bad practice :)

Het is een redelijke aanslag op de portability van je code. En dit is iets dat juist voor Javascript redelijk belangrijk is.

Het is tevens een van de redenen waarom jQuery zo populair is ten kostte van Prototype en Mootools.

Acties:
  • 0 Henk 'm!

  • crisp
  • Registratie: Februari 2000
  • Nu online

crisp

Devver

Pixelated

Gamebuster schreef op maandag 24 januari 2011 @ 00:19:
[...]

There, I Fixed It. 8)

Alleen alle andere for(... in ...) loops op Object's moeten nu rekening houden met prototypes- maar daar zal ik voortaan een gewoonte van maken.
Beter kan je dan hasOwnProperty gebruiken:
JavaScript:
1
2
3
4
5
for (x in this)
{
    if (this.hasOwnProperty(x))
        c++;
}


maar verder eens met Bosmonster: Object kan je beter niet extenden...

Intentionally left blank

Pagina: 1