IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Equivalent fonction count() pour javascript


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 264
    Par défaut Equivalent fonction count() pour javascript
    Bonjour,

    Existe-il un équivalent de la fonction count() pour javascript, exemple:

    var tab = ["val1","val2","val3"]
    for (i=0;i<count(tab);i++) {
    alert(tab[i]);
    }
    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var tab = ["val1","val2","val3"];
    for (i = 0; i < tab.length; i++) {
      alert(tab[i]);
    }
    A+

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 264
    Par défaut
    c'est marrant length c'est comme c++...

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2015
    Messages : 9
    Par défaut Pour information
    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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Préférer cette fonction qui tient justement pas compte de la valeur de l'indice mais du nombre d'item


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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;
        }
    vive JS

  5. #5
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    @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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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>

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2015
    Messages : 9
    Par défaut Correction
    @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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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));
     
    })();

  7. #7
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par défaut
    Citation Envoyé par ctrl+z Voir le message
    Existe-il un équivalent de la fonction count() pour javascript, [...]
    Oui, dans le JS d'aujourd'hui (ES2015 et +).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    let tab = ["val1","val2","val3"]
     
    for ( let item of tab ){
      console.log( item );
    }
    Si l'on a besoin de l'index :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for ( let [ i, item ] of tab.entries() ){
      console.log( i, item );
    }

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2015
    Messages : 9
    Par défaut Parcous de tableaux
    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.

  9. #9
    Membre émérite
    Femme Profil pro
    Autre
    Inscrit en
    Janvier 2017
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Janvier 2017
    Messages : 340
    Par défaut
    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é :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    nb_=0;
    for(i in [,,2,undefined,null,,5,]) {nb_++;} //nb_=4
    On peut ajouter un test sur les clés dans le cas où il y aurait des propriétés énumérables indésirables.

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2015
    Messages : 9
    Par défaut
    Citation Envoyé par Loralina Voir le message
    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).
    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:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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));
    ?>
    Et perso je me réfère au sujet du post et à la question du premier post

  11. #11
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    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.

    Nom : 170310-003.JPG
Affichages : 15899
Taille : 62,4 Ko

  12. #12
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 209
    Par défaut
    @callmarl :
    (...) mais elle ne compte pas le nombre d'éléments dans le tableaux.
    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 !

    De plus pour faire récent, on peux faire un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var tab=[1,,2,3,4,,,,,5];
    alert(tab.length);              // > 10
    alert(Object.keys(tab).length); // > 5

  13. #13
    Membre émérite
    Femme Profil pro
    Autre
    Inscrit en
    Janvier 2017
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Janvier 2017
    Messages : 340
    Par défaut
    Bonjour,
    Citation Envoyé par NoSmoking Voir le message
    @callmarl :
    ...rajouter le compteur comme tu l'as fait dans ta fonction !
    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") :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    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".


    De plus pour faire récent, on peux faire un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var tab=[1,,2,3,4,,,,,5];
    alert(tab.length);              // > 10
    alert(Object.keys(tab).length); // > 5
    Bonne idée, oui.
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    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.
    Voir ce lien pour d'autres idées :
    http://stackoverflow.com/questions/1...sitive-integer

  14. #14
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Janvier 2015
    Messages : 9
    Par défaut Je réponds seulement
    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à ).

    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

    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 01/12/2010, 14h46
  2. [MySQL] utiliser fonction count($_POST) javascript
    Par Shivas dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 23/06/2010, 16h00
  3. equivalent fonction in_array() dans javascript
    Par sami117 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 30/03/2009, 10h58
  4. Equivalent des fonctions Windows pour WinCE
    Par bilel benhalima dans le forum Windows
    Réponses: 3
    Dernier message: 31/03/2008, 23h17
  5. Equivalent a fonction DATEDIFF pour MySQL version 3.23
    Par npze dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 31/10/2005, 11h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo