Bonjour,
Existe-il un �quivalent de la fonction count() pour javascript, exemple:
MerciCitation:
var tab = ["val1","val2","val3"]
for (i=0;i<count(tab);i++) {
alert(tab[i]);
}
Version imprimable
Bonjour,
Existe-il un �quivalent de la fonction count() pour javascript, exemple:
MerciCitation:
var tab = ["val1","val2","val3"]
for (i=0;i<count(tab);i++) {
alert(tab[i]);
}
Bonjour,
A+Code:
1
2
3
4
5 var tab = ["val1","val2","val3"]; for (i = 0; i < tab.length; i++) { alert(tab[i]); }
c'est marrant length c'est comme c++...
Pour information je tenais a sp�cifier que length ne correspond pas au nombre d'�l�ment mais � la valeur du derni�re indice +1
Pr�f�rer cette fonction qui tient justement pas compte de la valeur de l'indice mais du nombre d'itemCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 Array[5] 0: 1.4128035320088301 1: 1.4128035320088301 2: 0.7078125 3: 1.4128035320088301 4: 1.4128035320088301 length: 5 Array[7] 0: 1.4128035320088301 1: 1.4128035320088301 2: 0.7078125 3: 1.4128035320088301 4: 1.4128035320088301 6: 1.5384615384615385 length: 7
vive JS :aie:Code:
1
2
3
4
5
6
7
8
9
10
11
12 function count(array){ var i = 0 var count = 0; while(array[i] != undefined && i <= array.length+1){ i++; if(typeof array[i] == undefined) continue; count++; } return count; }
@callmarl. Je n'ai pas r�ussi � faire fonctionner ta fonction. Elle me renvoie toujours 0.
En partant de ce que tu as �crit j'ai fait �a qui donne le nombre de postes ayant une valeur <> null.
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 <script> function count(array){ var i = 0; var count = 0; for (i=0;i < array.length;i++) if(array[i] != null) count++; return count; } a = new Array(); a[5] = 4520; a[10] = 10000; a[21] = 500; alert(a); // Liste les valeurs alert(a.length); // Affiche 22 alert(count(a)); // Affiche 3 </script>
@badaze.
En-effet merci de me le signal� j'ai fais une erreur dans la comparaison, il faut tester le string, j'en ai profiter pour l'optimiser :
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 (function(){ function count(array){ var i = 0; var count = 1; while(i < array.length){ i++; if(typeof array[i] != "undefined") count++; } return count; } var test_array = new Array(); test_array[0] = "un toto"; test_array[1] = "deux toto"; test_array[3] = "trois toto"; test_array[8] = "quatre toto"; test_array[17] = "cinq toto"; console.log(test_array); console.log("length", test_array.length); console.log("count", count(test_array)); })();
Hey, les deux fonctions que tu as donn�s servent seulement � parcourir un tableau (certe la syntaxe est nouvelle) mais elle ne compte pas le nombre d'�l�ments dans le tableaux.
Bonjour,
Tout d�pend de si on se r�f�re simplement � la question initiale ou au code mis en exemple (parcours du tableau du premier index au dernier, que tous les index soient d�finis ou non).
Si des index ne sont pas d�finis, une fonction "count" du style de php ne pourrait pas �tre utilis�e pour une boucle comme dans l'exemple.
La premi�re r�ponse convenait donc bien pour l'exemple donn�.
Concernant le fait de faire un "count" fa�on php, le "for...in" para�t adapt� :
On peut ajouter un test sur les cl�s dans le cas o� il y aurait des propri�t�s �num�rables ind�sirables.Code:
1
2 nb_=0; for(i in [,,2,undefined,null,,5,]) {nb_++;} //nb_=4
Je crois qu'il faut que tu r�vise ce que faits la fonction count() ici, car count retourne le nombre d'�lement d'un tableau (index� ou avec tout autre type de clef) qu'il est des trou ou non dans les clef, de la meme facon que si tu cherche � obtenir le nombre d'el�ment d'un tableau en JS que tout les index soient d�finit ou non, je crois avoir dis des le d�but que c'est ce que fesait proprit� length de l'objet Array() car length prends l'index de la derni�re valeur d'un tableau et ajoute 1...
Et sinon, tu execute ce code PHP et tu verra que count($array) affiche 3 est pas 6:
Et perso je me r�f�re au sujet du post et � la question du premier postCode:
1
2
3
4
5
6
7
8
9
10
11 <?php $array = []; $array[0] = 12; $array[4] = 1; $array[5] = 2; var_dump($array); var_dump(count($array)); ?>
Il y a une grosse diff�rence entre JS et PHP au niveau des tableaux.
En PHP si tu mets $array[1000] = 10; il n'y aura qu'un seul poste dans le tableau. Si tu fais isset($array[1]) tu obtiendras false.
En JS si tu cr�es l'Array array et que tu mets array(1000) = 10; les 1000 premiers postes existeront et auront la valeur null.
Pi�ce jointe 252890
Bonjour badaze,
Les index ne seront tout de m�me pas �num�rables ?Citation:
les 1000 premiers postes existeront et auront la valeur null.
De plus dans votre code ici "if(array[i] != null) count++;", si on met la comparaison stricte "!==null", on est d'accord que "count" vaudra 22 ?
callmarl :
Je connais, oui, mais qu'y a-t-il dans ce que j'ai dit qui laisse penser le contraire ?Citation:
Je crois qu'il faut que tu r�vise ce que faits la fonction count() ici
Vraiment je ne vois pas, donc je tente au hasard :
1) Quand je dis : "ou au code mis en exemple (parcours du tableau du premier index au dernier, que tous les index soient d�finis ou non)." :
Je parle du code du premier message :
Si on consid�re la question sans le code, on peut �tre tent� de faire une fonction similaire au "count" de php, mais si on regarde l'exemple, on se dit que c'est plut�t "length" qui est recherch� pour ce genre de boucle.Code:
1
2
3
4 var tab = ["val1","val2","val3"] for (i=0;i<count(tab);i++) { alert(tab[i]); }
2) Quand je dis : "Si des index ne sont pas d�finis, une fonction "count" du style de php ne pourrait pas �tre utilis�e pour une boucle comme dans l'exemple." :
Supposons qu'il y ait une fonction "count" comme php et adaptons l'exemple de d�part :
Il sera affich� "undefined" pour "i=0", mais pas la valeur 123 pour "i=1".Code:
1
2
3
4
5 var tab = []; tab[1] = 123; for (i=0;i<count(tab);i++) { alert(tab[i]); }
A noter au passage que la fonction "count" sera appel�e � chaque it�ration, ce qui n'est pas tr�s optimis� (sauf si c'est voulu car par exemple le nombre d'�l�ments du tableau change dans la boucle).
Oui, je sais, et moi je disais que la premi�re r�ponse et celle de danielhagnoul r�agissaient, de mon point de vue, plus sp�cifiquement � la boucle "for" de l'exemple, pour laquelle un "count" qui ne comptabilise que les cl�s �num�rables (ou �ventuellement les valeurs diff�rentes de undefined), ne permet pas de parcourir tous les index d�finis ou non.Citation:
Et perso je me r�f�re au sujet du post et � la question du premier post
O� est le souci ?
3) Le "for...in" que je propose ne convient-il pas ?
Si j'ai ceci :
J'attends d'une fonction "count" qu'elle me retourne 2 (index 1 et 3), ce que fait le "for...in" que je propose, mais c'est selon les objectifs, on peut pr�f�rer qu'elle retourne 1.Code:
1
2
3
4
5 var ar_=[]; ar_[1]=0; ar_[3]=undefined; ar_[5]=123; delete ar_[5];
4) Quand je dis, au sujet du "for...in" : "On peut ajouter un test sur les cl�s dans le cas o� il y aurait des propri�t�s �num�rables ind�sirables." :
Dans la majorit� des cas, on ne voudra comptabiliser que les cl�s qui sont des entiers positifs.
Si on a d�fini des propri�t�s �num�rables comme des fonctions, alors un test sur les cl�s est requis dans le "for...in".
On peut aussi avoir "tab=new Array(3)" ou "(tab=[]).length=3", "length" vaut 3, sans qu'il y ait d'index d�fini.Citation:
car length prends l'index de la derni�re valeur d'un tableau et ajoute 1...
A noter que dans votre fonction "count", le test commence � partir de "i=1", petite erreur � corriger. ;)
@callmarl :
non seulement tu d�terres une discussion de plus de 8 ans mais en plus tu n'es pas capable de rajouter le compteur comme tu l'as fait dans ta fonction !Citation:
(...) mais elle ne compte pas le nombre d'�l�ments dans le tableaux.
De plus pour faire r�cent, on peux faire un simple
Code:
1
2
3 var tab=[1,,2,3,4,,,,,5]; alert(tab.length); // > 10 alert(Object.keys(tab).length); // > 5
Bonjour,
Mettre le compteur "count" dans la boucle "for...of" de danielhagnoul, c'est bien �a ?
Pr�cisons alors qu'on obtiendra simplement la longueur "length" (� moins bien s�r d'ajouter un test sur la valeur ou l'index, mais ce n'est pas comparable au "for...in") :
C'est pour �a que je disais que l'intervention de danielhagnoul �tait dans la m�me optique que la premi�re r�ponse avec "length".Code:
1
2
3
4
5
6
7
8 let tab = new Array(5); tab[3]="a"; let count = 0; for ( let [ i, item ] of tab.entries() ){ console.log( i, item ); /*if(tab.hasOwnProperty(i)===true)*/ count++; } console.log("nombre : "+count); //5
Bonne id�e, oui.Citation:
De plus pour faire r�cent, on peux faire un simple
Code:
1
2
3 var tab=[1,,2,3,4,,,,,5]; alert(tab.length); // > 10 alert(Object.keys(tab).length); // > 5
Pour les rares cas o� il y a des propri�t�s �num�rables autres que les index entiers positifs classiques, on peut revenir � "for...in" (ou autre m�thode �quivalente s'il y a) et ajouter un test comme je disais :
Pour le test sur la cl�, j'ai fait la premi�re id�e qui me venait, � voir s'il n'y a pas des cas particuliers o� mon test est incorrect.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 function count(ar_) { var i,nb_; nb_=0; for(i in ar_) { if(Math.abs(Math.floor(i))==i) //attention : à bien vérifier, voir lien ci-dessous { nb_++; } } return nb_; } var ar_=[,,1,,undefined,,null]; //3 éléments ar_.length=20; ar_.f=function(){}; //4ème élément Object.defineProperty(ar_,"test",{value:"tutu",enumerable:false}); //5ème élément console.log(count(ar_),Object.keys(ar_).length,ar_.test); //3 4 tutu
Voir ce lien pour d'autres id�es :
http://stackoverflow.com/questions/1...sitive-integer
Je r�ponds seulement � une question, un �quivalent de la fonction count(); qui je pense en C aurai �galement �t� cr�e en testant le typeof. M'enfin bon... D'autre pars ta proposition Object.keys(tab).length est judicieuse, et malgr�s que le sujet date d'il y � 8 ans, les gens continu d'apprendre le JS et d'autre pars je suis tomber sur cet discussion en faisant une simple recherche google (fonction count() en JS) et qui plus ai dans les 3 premier lien google (d'ailleurs tr�s bon r�f�rencement de developpez sur ce coup l� :roll: ).
Je n'ai pas compris ta remarque � propos de ma fonction count() �tant donn� quelle sort exactement le m�me r�sultat que ta proposition :weird:
Bonne continuation, je pense que les prochaine personne qui tomberont comme moi sur ce vieux sujet et chercheront des r�ponse, l'auront et qui plus est de fa�on tr�s tr�s moderne. ;)
Tout � fait!Citation:
Envoy� par Loralina
Attention avec javascript m�me si les bases ne change gu�re il �volue quand m�me vite et souvent lorsque l'on d�bute il vaut mieux privil�gier des sources r�centes et commencer par ce documenter non pas sur bases de sources mais sur base du langage, m�thodes misent � disposition.Citation:
Envoy� par callmarl