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 :

Class javascript et tableau


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 36
    Points : 21
    Points
    21
    Par défaut Class javascript et tableau
    Bonjour à tous,

    Alors voila mon petit soucis, après avoir cherché des heures sur internet, je m'en remet à vous.

    J'aimerais instancié un élément à un indice précis. Mais je n'arrive pas à trouver comment faire ça ?

    Mes classes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    function patient(nmp,nom,tr){
    	this.nmp=nmp
    	this.nom=nom
    	this.tr=tr
    }
    function chambre(nmc, nbr, nbrm,patients){
    	this.nmc=nmc;
    	this.nbr=nbr;
    	this.nbrm=nbrm;
    	this.patients=patients;
    	this.addpatient = function(nmp,nom,tr) {
        this.patients.push(new patient(nmp,nom,tr));
        };
    }
    J'instancie ma première chambre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var chambre1= new chambre("ch1",0,4,[])
    Et ce que j'aimerais modifier est le [] qui représente une liste d'élément(listeception....)

    En temps normal mon code pour ajouter un élément à la suite est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chambre1.addpatient(value,text,tr)//Ce qui remplie la liste de chambre1
    Mais comme je l'ai dis précédemment, j'aimerais cette fois-ci spécifier l'indice pour que cela ne s'ajoute pas à la suite mais à un indice précis de la liste appartenant à chambre1.

    La raison est que le nombre de lit maximum est 4 et que je peux supprimer un des éléments de la liste. J'ai une fonction qui parcours la liste pour voir si de 1 à 4 il y à un élément vide dans quel cas si l'on rajoute un patient celui-ci s'ajoute à la position [i].

    Je pensais à ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chambre1.patients[i]=chambre1.addpatient(value,text,tr)
    Mais lorsque je veux retourner la valeur à l'indice [i] il m'indique "undefinided" donc je suppose que cela ne fonctionne pas...

    J’espère avoir été clair dans ma demande et vous remercie.

  2. #2
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    Pourquoi il y aurait un élément vide dans le tableau ? C'est fait exprès ? Avec la fonction this.patients.splice(i, 1) (pour supprimer un élément d'un tableau) il n'y a pas de blanc.

    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
    function patient(nmp,nom,tr){
    	this.nmp=nmp
    	this.nom=nom
    	this.tr=tr
    }
    function chambre(nmc, nbr, nbrm, patients){
    	this.nmc=nmc;
    	this.nbr=nbr;
    	this.nbrm=nbrm;
    	this.patients=patients;
    	this.addpatient = function(nmp,nom,tr) {
          if (this.patients.length <= this.nbrm)
            this.patients.push(new patient(nmp,nom,tr));
        };
        this.deletepatient = function(i) {
          this.patients.splice(i, 1);
        };
    }
     
    var chambre1= new chambre("ch1", 0, 4, []);
    chambre1.addpatient('A1', 'A2', 'A3'); 
    chambre1.addpatient('B1', 'B2', 'B3');
    chambre1.addpatient('C1', 'C2', 'C3');
    console.log(chambre1.patients); // tableau de 3 patients ([0] = A, [1] = B, [2] = C)
    chambre1.deletepatient(1); // On supprime celui du milieu
    console.log(chambre1.patients); // tableau de 3 patients ([0] = A, [1] = C)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 36
    Points : 21
    Points
    21
    Par défaut
    Tout d’abord merci de la réponse.
    Ensuite oui, en effet, c'est fait exprès sachant qu'une "chambre" ne peux contenir que 4 personne, et que lorsque je l'ajoute le patient se met à la suite du suivant d’où l'idée de l'enlever de la liste pour "laisser la place/remplacer" à un autre patient.

    Pour cela j'utilises :
    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
     
    "Patient 1": function() {
                	try{
                    $( this ).dialog( "close" );
    		id=chambre1.patients[0].nmp;
    		tri=chambre1.patients[0].tr;
                   name=chambre1.patients[0].nom
                   document.getElementById("B1").parentNode.parentNode.parentNode.innerHTML += '<tr id='+tri+'><td id='+ id +'  ondblclick="choix('+id+');">'+name+'</td></tr>';
                    delete chambre1.patients[0];
                    document.getElementById("ch1").removeChild(document.getElementById(id));
                    document.getElementById("ch1").removeChild(document.getElementById(tri));
                    nbr=nbr-1
                    chambre1.nbr=nbr
     
                   }
                   catch(e){
                   	alert(id)
                   	alert("Erreur")
                   }
    Ce qui supprime le patient dans le lit n°1 et ensuite lorsque je dépose le nouveau patient dans la chambre, une fonction recherche dans le tableau ou il y a de la place et le positionne à cet endroit.

  4. #4
    Membre émérite
    Avatar de Kaamo
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    1 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 165
    Points : 2 778
    Points
    2 778
    Par défaut
    A ta place j'aurai fait autrement.
    D'un coté tu as un tableau qui contient les données.
    De l'autre, une fonction d'affichage qui se base sur ce tableau pour dessiner l'écran.

    La on dirait que tu as mixé les deux ? Que quand tu ajoutes un patient .. en fait ça ajoute du html, et pareil quand tu supprimes.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 36
    Points : 21
    Points
    21
    Par défaut
    Bonjour, je pense que le push n'étant pas ce qu'il y a de mieux pour ce cas.
    En revanche, j'aimerais plutôt une structure de ce type:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    function patient(nmp,nom,tr){
    	this.nmp=nmp
    	this.nom=nom
    	this.tr=tr
    }
    function chambre(nmc, nbr, nbrm){
    	this.nmc=nmc;
    	this.nbr=nbr;
    	this.nbrm=nbrm;
    	this.patients=new patient(nmp,nom,tr);
     
        };
    Mais je ne sais pas trop comment recherché cela sur Google, ou même de pars ma personne, comment réaliser ça. Le patientS on instancie dedans un patient ce qui me semblerait plus simple à exploiter et à utiliser.

  6. #6
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    Il y a plein de choses que je ne pige pas dans ton code
    pourquoi le constructeur de la chambre de définit pas la liste des lit ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function chambre(nmc, nbr, nbrm,patients){
      this.nmc=nmc;
      this.nbr=nbr;
      this.nbrm=nbrm;
      this.patients=patients;
      this.addpatient = function(nmp,nom,tr) {
        this.patients.push(new patient(nmp,nom,tr));
      };
    }
     
    //pourquoi le paramètre [] ???
    var chambre1= new chambre("ch1",0,4,[])
    perso j'aurais fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function chambre(nmc, nbr, nbrm){
      this.nmc=nmc;
      this.nbr=nbr;
      this.nbrm=nbrm;
      this.patients=[];
      this.addpatient = function(nmp,nom,tr) {
        this.patients.push(new patient(nmp,nom,tr));
      };
    }
     
    var chambre1= new chambre("ch1",0,4)
    ensuite je ne comprends pas ton problème d'indice que tu ne peux pas définir.
    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
    function chambre(nmc, nbr, nbrm){
      this.nmc=nmc;
      this.nbr=nbr;
      this.nbrm=nbrm;
      this.patients=[];
      this.addpatient = function(nmp,nom,tr, i) {
        if (i < nbr || i >= nbrm) {
          throw "indice invalide";
        }
        this.patients[i] = new patient(nmp,nom,tr);
      };
    }
     
    var chambre1= new chambre("ch1",0,4);
    //ajout d'un patient dans le lit 2
    chambre1.addpatient('a','b','c',2);
    Je ne vois vraiment pas quel est ton problème
    A+JYT

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 36
    Points : 21
    Points
    21
    Par défaut
    Et bien j'aimerais simplement, ajouter 4 patients dans une chambre, puis en supprimer un au hasard(le 3eme) et ensuite en ajouter à nouveau 1, et que celui-ci se place à l'indice de celui supprimer.

    Bien évidement, une recherche de la ligne vide sera faite avant pour ensuite glisser le nouveau patient à cette emplacement, soit la 3eme position.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 36
    Points : 21
    Points
    21
    Par défaut
    Mais il semblerait que ta solution fonctionne à merveille.
    Désolé si je n'ai pus être explicite dans mon problème, mais c'est assez compliquer à expliquer lorsque l'on est pas un experts.

    Merci et bonne journée !

Discussions similaires

  1. [PHP-JS] Manipuler en Javascript un tableau dans un formulaire PHP
    Par Bouillons2 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 12/11/2010, 10h10
  2. classe javascript et ie sur onclick
    Par The_Pretender dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 11/10/2007, 23h04
  3. [AJAX] Soap Ajax classe javascript
    Par sekaijin dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 13/06/2006, 08h50
  4. javascript pour tableau à largeur de colonnes variables
    Par barkleyone dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 06/06/2006, 17h14
  5. Insertion javascript dans tableau HTML
    Par Rocca dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 08/08/2005, 12h28

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