1

Hello All,

Je suis en train de me mettre au javascript pour le bonheur de coder sur webos.
J'étais très content d'utiliser les tableaux avec comme indice des chaines de caractères (chose que j'aurais jamais fait en C++ LOL).
Cependant j'ai remarqué que si je faisais:
var tab = new Array();
tab["Toto"] = "Tata";

Et bien tab.length était toujours égal à zero sad
Comment est-il possible d'avoir la taille d'un tableau utilisé de cette manière?

Merci

2

Tu ne peux pas directement. Il faut se souvenir qu'en JavaScript, tu peux définir n'importe quel membre de n'importe quel objet, même s'il n'existait pas, et c'est ce que tu fais en faisant tab["Toto"] = "Tata" : tu crées une nouvelle propriété "Toto" et tu lui assignes la valeur "Tata". Mais ça ne change pas la taille du tableau pour autant, tu n'as pas ajouté un nouvel élément dans le tableau (les indices d'un tableau en JS sont obligatoirement numériques).

L'une des solutions serait de faire ça, mais je te laisse imaginer ce que ça donne au niveau performances :

[source=js]var count = 0;

for (var prop in tab)
if (tab.hasOwnProperty (prop))
++count;[/source]
Quelques remarques en vrac :

- La méthode "hasOwnProperty" permet de vérifier qu'il s'agit bien d'une propriété de ton objet tab et non d'une propriété héritée de l'un de ses parents ;
- tab["Toto"] est équivalent à tab.Toto ; si "Toto" est une constante, on préfère la deuxième écriture plus concise ;
- Pour initialiser un nouveau tableau, "[]" est la syntaxe habituelle, même si "new Array()" est toléré pour être homogène avec les autres objets (mais les tableaux sont un cas particulier en JavaScript, et ça n'est pas un sucre sur le constructeur qui va y changer grand chose) ;
- Si tu utilises ton tableau de cette manière, ça ne sert à rien d'utiliser un tableau, autant partir d'un objet vierge ("tab = {};").
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

3

Ok, merci pour la réponse, c'est un peu plus clair!!
Sinon j'ai trouvé un très bon lien pour les personnes se posant la même question que moi:
http://www.hunlock.com/blogs/Mastering_Javascript_Arrays

4

J'usurpe le topic pour poser une question sur un autre sujet.
Je programme en ce moment sur WebOS pour le fun, j'ai cependant beaucoup de mal avec ces fonctions:
this.gotFilter = this.gotFilter.bind(this);

C'est une autoréférence? Je ne comprends pas trop l'intérêt de la chose.

5

bah ça dépend du contenu de "gotFilter", ça réassigne juste une nouvelle méthode dans cette propriété, après l'effet dépend complètement de l'implémentation.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)