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 :

Identifier le nombre de dimensions d'un tableau


Sujet :

JavaScript

  1. #1
    Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2005
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2005
    Messages : 70
    Points : 55
    Points
    55
    Par défaut Identifier le nombre de dimensions d'un tableau
    J'ai un tableau de strings qui peut prendre 1 ou 2 dimensions (ou "colonnes") et que je passe à une fonction d'affichage. La longueur (nombre de "lignes") de ce tableau peut par ailleurs varier d'un appel à l'autre. Comment faire dans ces conditions pour détecter si le tableau est à 1 ou 2 dimensions en entrée de la fonction ? Ce qui m'étonne c'est que dans les 2 cas (1 ou 2 dimensions), le second indice est toujours accessible aux tests (... plutôt que donner un "undefined" ou une erreur...).

    Exemple de 2 tableaux à 1 seule ligne :
    Tablo1 [0] = "ABCDEF"
    et
    Tablo2 [0][0] = "ABCDEF", Tablo2 [0][1] = "GHIJKL"

    L'édition de valeurs va donner...
    pour Tablo1 : Tablo1 [0][1] => "B"
    pour Tablo2 : Tablo2 [0][1] => "GHIJKL"

    Donc, comment faire pour détecter à coup sûr l'existence ou l'absence de la seconde dimension ?

    Merci à tous

  2. #2
    Membre averti
    Avatar de Darkyl
    Homme Profil pro
    autodidacte en recherche d'emploi
    Inscrit en
    Novembre 2004
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : autodidacte en recherche d'emploi

    Informations forums :
    Inscription : Novembre 2004
    Messages : 440
    Points : 352
    Points
    352
    Billets dans le blog
    1
    Par défaut
    Salut,

    Je pense que ton problème vient du fait que tu laisse javascript trouver le type de tes données tout seul:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var Tablo1=new Array();
         Tablo1[0]='bidule';
    Là, si tu fais typeof Tablo1[0][0], il te dira char (ou string) et pas object donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    si typeof pas object, alors n'existe pas...
    Tout simplement

    Maintenant,
    tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var Tablo1=new Array();
    var Tablo1[0]=new Array();
         Tablo1[0][0]='machin';

    Là, si tu fais typeof Tablo1[0][0], il te dira string.
    si tu fais typeof Tablo1[0], il te dira object.

    A mon avis, déclare tes types et tu n'aurais plus de problème de typeof...
    Fais la condition de si pas object et tu saura si le tableau existe ou pas.
    Darkyl, celui qui conduit quand il boit pas .(faudra penser passer le permis )

  3. #3
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    Citation Envoyé par puresprit Voir le message
    Exemple de 2 tableaux à 1 seule ligne :
    Tablo1 [0] = "ABCDEF"
    et
    Tablo2 [0][0] = "ABCDEF", Tablo2 [0][1] = "GHIJKL"

    L'édition de valeurs va donner...
    pour Tablo1 : Tablo1 [0][1] => "B"
    pour Tablo2 : Tablo2 [0][1] => "GHIJKL"
    Pour le cas en rouge ci-dessus, il n'y a pas de "deuxième dimension" comme tu dis : tu as été induit en erreur par une fonctionnalité fournie par la plupart des navigateurs sur les strings, la possibilité d'accéder aux caractères de la chaine par leur position, avec la syntaxe chaine[indiceDuCaractereARecuperer], c'est-à-dire un simple alias pour String.charAt. En revanche, ton Tablo1 [0] n'est pas du tout un tableau, contrairement à Tablo2 [0].

    Je suis d'accord avec Darkyl sur la solution typeof, qui pourrait ressembler à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (typeof tonTableau[0] == "object") {
       // traitement des tableaux à deux dimensions
    }
    else {
       // traitement des tableaux à une seule dimension
    }
    ...et passons sur le fait que JS renvoie "object" à la fois pour les Object et pour les Array ...

    ...pour les linguistes et les curieux >>> générateur de phrases aléatoires

    __________________

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 669
    Points
    66 669
    Billets dans le blog
    1
    Par défaut
    ne vaudrait il mieux pas passer par instanceof Array ???
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Expert confirmé
    Avatar de RomainVALERI
    Homme Profil pro
    POOête
    Inscrit en
    Avril 2008
    Messages
    2 652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : POOête

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 652
    Points : 4 164
    Points
    4 164
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    ne vaudrait il mieux pas passer par instanceof Array ???
    Si

    J'imagine que les deux vont fonctionner dans le contexte, mais c'est effectivement plus cohérent. ^^

    ...pour les linguistes et les curieux >>> générateur de phrases aléatoires

    __________________

  6. #6
    Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2005
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2005
    Messages : 70
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par RomainVALERI Voir le message
    Pour le cas en rouge ci-dessus, il n'y a pas de "deuxième dimension" comme tu dis : tu as été induit en erreur par une fonctionnalité fournie par la plupart des navigateurs sur les strings, la possibilité d'accéder aux caractères de la chaine par leur position, avec la syntaxe chaine[indiceDuCaractereARecuperer], c'est-à-dire un simple alias pour String.charAt. En revanche, ton Tablo1 [0] n'est pas du tout un tableau, contrairement à Tablo2 [0].

    Je suis d'accord avec Darkyl sur la solution typeof, qui pourrait ressembler à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (typeof tonTableau[0] == "object") {
       // traitement des tableaux à deux dimensions
    }
    else {
       // traitement des tableaux à une seule dimension
    }
    ...et passons sur le fait que JS renvoie "object" à la fois pour les Object et pour les Array ...
    Oui, la soluce, c'est sans doute typeof, malgré le pb Object/Array... Je n'y avais pas pensé parce que justement, pour moi, dans les deux cas, j'avais bien un Array....

    Je n'ai pas été induit en erreur par la fait que l'édition de Tablo1 me donne un seul caractère : c'est "régulier"... Par ailleurs, je trouve quand même curieux que ".length" ne soit pas une propriété plus sophistiquée, sur les tableaux à plusieurs dimensions.

    En tous cas : merci !

  7. #7
    Membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2005
    Messages
    70
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2005
    Messages : 70
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par RomainVALERI Voir le message
    Si

    J'imagine que les deux vont fonctionner dans le contexte, mais c'est effectivement plus cohérent. ^^
    Oui, ça donne "vrai" dans les deux cas...

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

Discussions similaires

  1. [XL-2000] Gérer un tableau dont le nombre de dimensions est variable
    Par jax54000 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 11/11/2011, 08h10
  2. Nombre de lignes d'un tableau à plusieurs dimensions
    Par maeva13 dans le forum QlikView
    Réponses: 0
    Dernier message: 24/10/2011, 17h27
  3. Nombre de dimensions d'un tableau multidimensionnel
    Par Bruno75 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 08/07/2005, 10h03
  4. Avis aux experts : accéder aux dimensions d'un tableau.
    Par poulpi dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 25/11/2004, 09h09
  5. [VB.NET] Dimension d'un tableau
    Par fabthebreton dans le forum Windows Forms
    Réponses: 2
    Dernier message: 26/07/2004, 09h37

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