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 :

tableau mutlidim, besoin de précision


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 144
    Par défaut tableau mutlidim, besoin de précision
    Bonjour à tous,

    Voila j'ai besoin de mettre en place un tableau multidimensionnel, mais je dois mal l'instancier puisque j'ai des problèmes sur la valeur de la propriété .length

    nb : Mon tableau est à trois dimensions, voici son instanciation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var tabAssDom = new Array ()
    Comme les dimensions sont variables, je ne peux lui donner de tailles fixes tout de suite (en plus je ne sais pas si cela se fait en JS)

    un code étant plus explicite, voici la procédure d'insertion dans ce tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if (!tabAssDom[id1])
    	tabAssDom[id1] = new Array ();
    if (!tabAssDom[id1][id2])
    	tabAssDom[id1][id2] = new Array ();
     
    tabAssDom[id1][id2][id3] = "1";
    Je pense que cette partie est correct, le problème est que si je test la propriété length de n'importe laquelle des dimensions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    tabAssDom[id1][id2][id3].length
    ou encore tabAssDom.length
    il me retourne n'importe quoi (en règle général 30)

    Malgré cela l'exploitation du tableau via for...in marche correctement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    for (var id1in tabAssDom)
    {
    	...
    	for (var DGId in tabAssDom[NId])
    	{
    		...
    		for (var DTId in tabAssDom[NId][DGId])
    		{
    			...
    		}
    	}
    }
    Le problème se situe maintenant sur la procédure de suppression d'un élément, vous l'aurez compris ce tableau représentant un arbre, lors de cette suppression si un noeud disparait je dois supprimer la branche entière
    voici la procédure associée, qui ne marche pas, vu que la propriété .length renvoi n'importe quoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    tabAssDom[id1][id2].splice(id3,1);
     
    if (!tabAssDom[id1][id2].length)
    {	
    	tabAssDom[id1].splice (id2,1);
     
    	if (!tabAssDom[id1].length)
    	{
    		tabAssDom.splice(id1,1);
    	}
    }
    J'ai été un peu long, mais je pense que tout est clair
    Have you some idea ?

  2. #2
    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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    Par défaut
    question subsidiare
    quelles valeurs peuvent prendre tes varaible indices de l'array littéral ?

    dans un array littéral; il semblerait que javascript réserve des indices intermédiaires ???
    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 !

  3. #3
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <div class="bbcode_container">
    	<div class="bbcode_quote">
    		<div class="quote_container">
    			<div class="bbcode_quote_container"></div>
     
    				tabAssDom[id1][id2][id3].length
    ou encore tabAssDom.length
     
    		</div>
    	</div>
    </div>
    la première alerte te donnera la longueur de la chaîne contenue dans la case désignée;

    la seconde te renverra le nombre d'éléments de premier niveau (tableau tabAssDom[]);

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 144
    Par défaut
    Seulement des nombres
    dois je caster pour en être sur ?

  5. #5
    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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <script type='text/javascript'>
     
    var tabAssDom= new Array() 
    if (!tabAssDom['bb'])
    	tabAssDom['bb'] = new Array ();
    if (!tabAssDom['bb']['cc'])
    	tabAssDom['bb']['cc'] = new Array ();
     
    tabAssDom['bb']['cc']['dd'] = "1";
    alert (tabAssDom['bb']['cc'].length)
    alert (tabAssDom['bb']['cc']['dd'].length)
    </script>
    j'ai bien un bon retour des length
    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 !

  6. #6
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    sur la réponse de SF, c'est vrai, un indice littéral ne permet pas de calculer la longueur du tableau; il faut travailler en deux temps:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (ind in tab){
    lg++
    }
    alert(lg);

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 144
    Par défaut
    Merci pour vos réponses cela a ouvert mes perspectives, en fait les indices que je lui passe sont des clés d'identifiant d'entités provenant de ma base ...

    Et la ou il y a moyen de rigoler , c'est que la valeur 30 qu'il me retourne est
    identifiant 29 + 1 (le zéro certainement)

    je trouve cela un peu tirer par les cheveux tout de même, merci pour votre aide

  8. #8
    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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    var tabAssDom= new Array() 
    tabAssDom[30] = "abc"
    alert (tabAssDom.length)
    alert(tabAssDom[0])
    oui c'est une curiosité de javascript ...

    il considère que le tableau comporte 31 éléments même si les 30 premiers sont undefined ...
    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 !

  9. #9
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    oui, c'est ça; bref, le for / in qui incrémente une variable te renverra length quand même;

  10. #10
    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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    Par défaut
    fais toi un prototype sur l'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 !

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 144
    Par défaut
    héhé
    good idea

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 144
    Par défaut prototype problème
    Alors là maintenant j'ai le droit à un truc bizarre
    je met en place le prototype dans un fichier externe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Array.prototype.myLength = function ()
    {
    	var i = 0;
    	for (var tmp in this) i++;
    	return i;
    }
    mais la même sans appel il m'affiche la fonction comme ça en plein milieu de nul part, la j' HALU complètement

  13. #13
    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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    Par défaut
    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
    <script type='text/javascript'>
     
    var tabAssDom= new Array() 
    tabAssDom[30] = "abc"
     
    function ArrayLength(){
    			var lg=0
    			for (ind in this){
    								 lg += ind+"\<br\/\>"
    								}
    			document.write (lg);
           }
     
     
    Array.prototype.MyLength=ArrayLength()
     
    alert(tabAssDom.MyLength)
    </script>
    Lol moi il me retourne 37 ... les propriétés du body ...
    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 !

  14. #14
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    de toute façon, un prototype pour ça n'est pas une très bonne idée, à moins de décompter les propriétés ajoutées de ce fait... dont la méthode en cours

  15. #15
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    tu te mélanges un peu les pinceaux là SF

  16. #16
    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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    Par défaut
    encore un truc que m'a échappé là ... et qui m'échappe toujours ...
    tu peux developper JT STP ?
    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 !

  17. #17
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 684
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 684
    Par défaut
    ben ton prototypage est raté

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Array.prototype.MyLength=ArrayLength()

    les parenthèses lancent l'exécution de la fonction illico, et la méthode n'est pas "vraiment" affectée aux objets Array; en fait, la fonction renverra invariablement les propriétés de la fenêtre (this);

    et puis ton alerte ne donne pas grand chose vue l'absence de return dans la fonction;

    tu peux corriger comme ça:

    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
    var tabAssDom= new Array() 
    tabAssDom[30] = "abc"
     
    function ArrayLength(){
    			var lg=0
    			for (ind in this){
    								 lg += ind+"\<br\/\>"
    								}
    			document.write (lg);
           }
     
     
    Array.prototype.MyLength=ArrayLength
     
    tabAssDom.MyLength()
    en constatant que la nouvelle propriété est listée, aussi bien que les indices du tableau;

  18. #18
    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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    Par défaut
    oui le document.write était pour savoir quels étaient les 37 trucs qu'il me renvoyait ...

    et en initlaisant lg à -1 on arrive au bon résultat ...

    Merci JT ...

    y-a-t-il un moyen de connaitre le nombre de prototypes d'un Array ???
    suffirait alors d'initialiser lg à 0-nbredeproto ...
    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 !

  19. #19
    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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    Par défaut


    Bon alors le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Array.prototype.MyLength()
    s'applique bien dans ce cas, sauf que je ne peut pas initialiser le lg car on boucle !!!

    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
     
    var Pl=????????
     
    function ArrayLength(){var lg=0-Pl;
    			for (ind in this){
    								 lg++
    								}
    			return lg;}
     
    Array.prototype.MyLength=ArrayLength
     
     
    var tabAssDom= new Array() 
    tabAssDom[30] = "abc"
    tabAssDom[25] = "dbc"
    tabAssDom[25] = "dbc"
     
    var a=tabAssDom.MyLength()
    alert (a)
     
     
    alert (Array.prototype.MyLength())
    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 !

  20. #20
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 144
    Par défaut
    Javascript c'est quand même un truc de fou

    Vous savez pas si il y a des projets de remplacement ou encore d'amélioration de se bordel innomable... Non je ne suis pas sectaire

    aprés Edit : non c'est pas troll

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

Discussions similaires

  1. Requete Insert - besoin de précisions
    Par sqlnoob dans le forum ASP
    Réponses: 3
    Dernier message: 14/03/2007, 12h18
  2. [SOAP] besoin de précision
    Par Louis-Guillaume Morand dans le forum Services Web
    Réponses: 1
    Dernier message: 05/03/2007, 21h10
  3. [POO Basique] Besoin de précision sur une notion de base
    Par alois.cochard dans le forum Langage
    Réponses: 8
    Dernier message: 15/09/2006, 09h01
  4. [VB.NET]Besoin de précision pour architecture 3-tiers
    Par Dnx dans le forum Windows Forms
    Réponses: 8
    Dernier message: 14/09/2005, 09h09
  5. Besoin de précision sur TThread
    Par psau dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/02/2005, 23h35

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