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

jQuery Discussion :

Suppression des items d'un array avec splice dans une boucle


Sujet :

jQuery

  1. #1
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 407
    Points : 4 847
    Points
    4 847
    Par défaut Suppression des items d'un array avec splice dans une boucle
    bonsoir,
    j'ai l'objet suivant qui contient des commentaires, sous commentaires, sous sous commentaires et sous sous sous commentaires.
    pour cet exemple je n'ai pas utilisé les sous sous sous commentaires.

    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
     
    let com = {
        "0": {
          "id_comment": "107",
          "id_pub": "96"
        },
        "1": {
          "id_comment": "108",
          "id_pub": "96"
        },
        sous_commentaire: [{
          "id_s_comment": "48",
          "id_comment": "107"
        }, {
          "id_s_comment": "49",
          "id_comment": "107"
        }, {
          "id_s_comment": "60",
          "id_comment": "107"
        }],
        sous_sous_comment: [{
          'id_2s_comment': '10',
          'id_s_comment': '48'
        }, {
          'id_2s_comment': '11',
          'id_s_comment': '49'
        }],
        "3s_comment": []
      };
    quand un commentaire est supprimé, il faut donc supprimer tout les s_com, 2s_com et 3s_com relatifs a ce commentaire, alors je fais :
    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
     
    $.map(com, function(val, cle) {
      if (cle != 'sous_commentaire' && cle != 'sous_sous_comment' && cle != '3s_comment') {
        com.sous_commentaire.map(function(cle1, i) {
          if (cle1.id_comment == val.id_comment) {
            com.sous_sous_comment.map(function(cle2, i2) {
              if (cle1.id_s_comment == cle2.id_s_comment) {
              	 com.sous_sous_comment.splice(i2, 1);//suppression 2s_com
              }
            });
          com.sous_commentaire.splice(i, 1);//suppression s_com
          }
        });
     
      }
    return com;
    });
    console.log(JSON.stringify(com));
    /*resultat : {"0":{"id_comment":"107","id_pub":"96"},"1":{"id_comment":"108","id_pub":"96"}
    ,"sous_commentaire":[{"id_s_comment":"49","id_comment":"107"}]
    ,"sous_sous_comment":[{"id_2s_comment":"11","id_s_comment":"49"}],"3s_comment":[]}*/
    ce que je ne comprends pas c'est pourquoi les sous commentaires et les sous sous commentaires ne sont pas correctement supprimés , il reste encore un item..., normalement il doit être supprimé non?
    est ce que c'est un problème d'index de splice ?

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 407
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 407
    Points : 4 847
    Points
    4 847
    Par défaut
    j'ai résolu le problème en utilisant un tableau qui contient l'index de chaque élément trouvé avant de le supprimer, puis faire un compteur pour savoir combien d'élément ont été supprimés afin de recalculer l'index.
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
     
    let com = {
      1: {
    	id_comment: 108,
    	id_pub: 96
      }
      ,0: {
    	id_comment: 107,
    	id_pub: 96
      }
      ,sous_commentaire: [{
    	id_details_comment: 48,
    	id_comment: 107
      },
      {
    	id_details_comment: 38,
    	id_comment: 100
      }, 
      {
    	id_details_comment: 50,
    	id_comment: 107
      }, 
      {
    	id_details_comment: 49,
    	id_comment: 107
      }],
      sous_sous_comment: [
    	{
    		id_2s_com:2
    	  ,id_details_comment:48
    	},{
    		id_2s_com:3
    	  ,id_details_comment:48
    	},{
    		id_2s_com:20
    	  ,id_details_comment:18
    	}],
      "3s_comment": []
    },t=[],_index,compteur,compteur_s,compteur_2s
    ,supprimer_com=function(id){
    	t.length=0;
    	compteur=0,compteur_s=0,compteur_2s=0
    	$.map(com, function(val, cle) {
    		if (!isNaN(cle)) {
    		if(val.id_comment==id){
    			t.push({type:'com',name_cle:cle
    			,id:val.id_comment});
    			com.sous_commentaire.map(function(cle1, i) {
    			  if (cle1.id_comment == val.id_comment) {
    				compteur_s++;
    				t.push({type:'s_com',index:i
    				,nbr_removed:i==0?i+1:compteur_s
    				,id:cle1.id_details_comment});
    				com.sous_sous_comment.map(function(cle2,i2){
    					if(cle2.id_details_comment==cle1.id_details_comment){
    					compteur_2s++;
    					t.push({type:'2s_com',index:i2
    					,nbr_removed:i2==0?i2+1:compteur_2s
    					,id:cle2.id_2s_com});
    				  }
    				});
    			  }
    			});
    		}
    	  }
     
    	});
    	//parcourir t pour effectuer la suppression :
    	$.map(t,function(val_cle,nom_cle){
    		if(val_cle.type=='com'){
    			delete com[nom_cle];
    		}
    		else if(val_cle.type=='s_com'||val_cle.type=='2s_com'){
    			if(val_cle.index==0){
    				_index=0;
    			}
    			else if(val_cle.index>0){
    				if(val_cle.index+1==val_cle.nbr_removed||val_cle.index==val_cle.nbr_removed){
    					_index=val_cle.index-parseInt(val_cle.nbr_removed-1);
    				}
    				else if(val_cle.index>val_cle.nbr_removed){
    					_index=parseInt(val_cle.index-val_cle.nbr_removed);
    				}
    			}
    			console.log('index :'+_index);
    			if(val_cle.type=='s_com'){com.sous_commentaire.splice(_index,1);}
    			else if(val_cle.type=='2s_com'){com.sous_sous_comment.splice(_index,1);}
     
    		}
    	});
    	console.log(JSON.stringify(com));
    }
    cela me semble un peu long, si vous avez des conseils, je suis preneur.

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

Discussions similaires

  1. Remplir un array avec, je suppose une boucle.
    Par misterfredy dans le forum Langage
    Réponses: 2
    Dernier message: 17/06/2016, 16h36
  2. [Débutant] générer des nombres aléatoires avec randn() dans une boucle
    Par Anna76 dans le forum MATLAB
    Réponses: 2
    Dernier message: 28/07/2014, 13h55
  3. Copier des items selectionner qui ont été rechercher dans une checkedlistbox
    Par mlescaudron21 dans le forum Discussions diverses
    Réponses: 0
    Dernier message: 03/01/2012, 15h40
  4. Réponses: 2
    Dernier message: 14/07/2006, 18h37
  5. Problème avec TNMSMTP dans une boucle.
    Par Orgied dans le forum Web & réseau
    Réponses: 3
    Dernier message: 07/04/2004, 10h19

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