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 :

[POO] Suppresion d'un objet dans un array


Sujet :

JavaScript

  1. #1
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 93
    Points : 65
    Points
    65
    Par défaut [POO] Suppresion d'un objet dans un array
    Bonjour à tous,

    jme galere un peu à trouver la soluce pour mon problème.
    Je m'explique:

    j'ai un tableau d'objet qui se rempli comme ci dessous:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    truc = new Truc(Convemp, nomTruc, '#ff0000');
     
    tab_Truc[tab_Truc.size()] = truc;
    A une etape de mon script, j'aimerai supprimer un objet de mon tableau.

    j'ai essayé tout plein de truc, genre une boucle avec une condition a l'interieur qui, en cas de succès execute un: delete tab_Truc[i] par exemple, mais rien a faire...

    J'utilise le prototype js, j'ai rien trouvé de plus sur la doc, si quelqu'un peut m'eclairer, merci d'avance.

  2. #2
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    Salut
    Tu utilises des objets , donc pourquoi ne pas utiliser une collection plutot qu'un tableau ??

    exemple :

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    function MaCollection()
    {
    	//Propriété permettant de savoir sur quelle objet de la collection on est positionné
    	this.Position = 0 ;
    	var LSize = 0;
    	//Méthode permettant d'ajouter un objet à la collection
        this.Add=function(obj)
        {
            this.push(obj);
    		LSize++;
        }
     
    	this.Delete =function(IdToDelete){
    		//On va rechercher l'index de l'objet a supprimer en fonction de son id
    		for(var index=0;index <this.length;index++){
    			if(this[index].Id == IdToDelete){
    				break;
    			}
    		}
     
    		delete(this[index]);
     
    		for(var i = index; i < (LSize-1) ; i++){
    			//On positione l'objet suivant a la place de celui qui a été supprimé
    			if( (i >= 0) || ( i <= this.length)){
    				this[i] = this[(i+1)];
    			}
    			else{
    				break;
    			}
    		}
    		this.pop();
    		LSize--;
     
    	}
    }
    Ensuite tu dois créer une collection puis y ajouter tes objets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var NomDeTaCollection = new MaCollection();
    et enfin tu ajoutes tes objets :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    NomDeTaCollection .Add(TonObjet);
    NomDeTaCollection .Add(TonSecondObjet);
    ou delete

    Le code peut comporter qqs bug mais tu as les grandes lignes /!\

  3. #3
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 93
    Points : 65
    Points
    65
    Par défaut
    Merci, beaucoup je vais essayer ca je te tient au courant ok?

  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 642
    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 642
    Points : 66 668
    Points
    66 668
    Billets dans le blog
    1
    Par défaut
    oui enfin reagrde surtout du coté de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    pop()
    slice()
    splice()

  5. #5
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    En passant juste par un tableau ?
    pourquoi n'es tu pas partisans d'une gestion objet ?

  6. #6
    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 642
    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 642
    Points : 66 668
    Points
    66 668
    Billets dans le blog
    1
    Par défaut
    ben ces instruction fonctionnent aussi pour du littéral ...
    mais on peut aussi passer par du hash ...

  7. #7
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    pas daccord
    autant adopter une gestion objet , ce qui facilitera l'ajout / suppression de donnée , sur lequel il pourra ajouter par exemple la gestion de doublon sur la méthode add sans retoucher au prototype ...

  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 642
    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 642
    Points : 66 668
    Points
    66 668
    Billets dans le blog
    1
    Par défaut
    cf mon script de hash

  9. #9
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    oui mais tu ajoutes une gestion supplémentaire sur le prototype ...
    sur la forme , cela fonctionne on est d'accord, mais un hash , ne représente pas une collection d'objet à proprement parler
    Je me trompe ?

  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 642
    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 642
    Points : 66 668
    Points
    66 668
    Billets dans le blog
    1
    Par défaut
    tu peux en faire une collection d'objets non ?

  11. #11
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    Oui tout a fait , c'est ce que je te disais plus haut , mais tu va dévier l'utilisation de base des hashs ( selon ce qu'on en a vue dans ton post ... ) OU combiner une gestion de collection avec l'utilisation d'un hash a la place d'un array literal .... mais selon moi sans sortir du cadre d'une collection d'objet , et non d'un hash d'objet ...
    ( je vais manger a tout a l'heure )

  12. #12
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 93
    Points : 65
    Points
    65
    Par défaut
    arf j'ai un pb ici quand j'utilise la collection:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TypeError: this.push is not a function

  13. #13
    Expert confirmé
    Avatar de le_chomeur
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2006
    Messages
    3 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 3 653
    Points : 4 835
    Points
    4 835
    Par défaut
    ups !!
    mes excuses , voici la méthode permettant de créer une collection TYPéE :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    //Cette fonction permet de créer des collections d'objet de n'importe quel type
    function CreateCollection(ClassName)    
    {
        var obj=new Array();
        eval("var t=new "+ClassName+"()");
        for(_item in t)
            {
                eval("obj."+_item+"=t."+_item);
     
            }
        return obj;
    }
    Utilisation a partir de mon code précédent :
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    function MaCollection()
    {
    	//Propriété permettant de savoir sur quelle objet de la collection on est positionné
    	this.Position = 0 ;
    	var LSize = 0;
    	//Méthode permettant d'ajouter un objet à la collection
        this.Add=function(obj)
        {
            this.push(obj);
    		LSize++;
        }
     
    	this.Delete =function(IdToDelete){
    		//On va rechercher l'index de l'objet a supprimer en fonction de son id
    		for(var index=0;index <this.length;index++){
    			if(this[index].Id == IdToDelete){
    				break;
    			}
    		}
     
    		delete(this[index]);
     
    		for(var i = index; i < (LSize-1) ; i++){
    			//On positione l'objet suivant a la place de celui qui a été supprimé
    			if( (i >= 0) || ( i <= this.length)){
    				this[i] = this[(i+1)];
    			}
    			else{
    				break;
    			}
    		}
    		this.pop();
    		LSize--;
     
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //TRES important MaCollection doit être avoir le même nom que ton type de collection
    var maCollection = new CreateCollection("MaCollection");
    // puis : 
    maCollection.Add(TonObjet);

    Voila c'est bon cette fois ci

  14. #14
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 93
    Points : 65
    Points
    65
    Par défaut
    ca marche, merci pour tout le_chomeur

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

Discussions similaires

  1. [XML] Lire un OBJET dans un OBJET dans un ARRAY
    Par Irokoi dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 24/05/2013, 14h53
  2. [PHP 5.0] [POO] Propriétés comme des objets dans une classe
    Par Zaki_SDwin dans le forum Langage
    Réponses: 8
    Dernier message: 30/06/2010, 12h54
  3. [POO] PHP 5, transmettre objet dans la session
    Par FCDB dans le forum Langage
    Réponses: 2
    Dernier message: 23/05/2006, 14h26
  4. [POO] import d'objet dans une classe
    Par wdionysos dans le forum Langage
    Réponses: 3
    Dernier message: 01/04/2006, 21h05
  5. [POO] Passage d'objet dans un formaulaire
    Par jiluc dans le forum Langage
    Réponses: 4
    Dernier message: 16/12/2005, 16h07

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