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 :

Optimiser un tableau javascript


Sujet :

jQuery

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 49
    Par défaut Optimiser un tableau javascript
    Bonsoir
    Voici un bout de code que j'ai développé pour une appli web.
    J'aurais aimé avoir qu'un seul tableau pour optimiser mon code.
    Est ce que c'est possible ? Si oui, comment pourrais je faire ?
    Merci d'avance pour votre aide.

    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
    // tableau liste zone
    tabListZoneMap = new Array("zoneParis","zoneMarseille", "zoneLyon");
     
    // tableau zone id
    tabZoneMap = new Array();
    tabZoneMap["zoneParis"] = new Array("3", "/paris");
    tabZoneMap["zoneMarseille"] = new Array("0", "/marseille");
    tabZoneMap["zoneLyon"] = new Array("1", "/lyon");
     
    // boucle sur le tableau
    tabListZoneMap.forEach(function(item, index, array) {
    	var nbAnnonce= tabZoneMap[item][0];
    	var href= tabZoneMap[item][1];
    	console.log(item, index);
    	console.log(nbAnnonce);
    	console.log(href);
    });

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

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 496
    Par défaut
    Bonjour,

    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
    16
    17
    18
    19
    20
    21
    22
    // tableau zone id
    let tabListZoneMap = [{
        zone: "Paris",
        href: "/paris",
        nbrAnnonce: 3
      },
      {
        zone: "Marseille",
        href: "/marseille",
        nbrAnnonce: 0
      },
      {
        zone: "Lyon",
        href: "/lyon",
        nbrAnnonce: 1
      }
    ];
     
    // boucle sur le tableau
    tabListZoneMap.forEach(function(item, index, array) {
      console.log("zone :", item.zone, ", nbrAnnonce :", item.nbrAnnonce, ", href :", item.href);
    });

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 49
    Par défaut
    Merci mais comment faire ensuite pour récupérer le href ou le nombre d'annonce d'une ville précise ?
    Avec mon code, je faisais comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var nbAnnonceParis= tabZoneMap["zoneParis"][0];
    var hrefParis= tabZoneMap["zoneParis"][1];
    mais là avec le nouveau tableau, je ne vois pas comment faire.

  4. #4
    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
    Bonjour,

    Toufik te l'a montré, non?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 49
    Par défaut
    il faudrait boucler sur le tableau à chaque fois comme ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    tabListZoneMap.forEach(function(item, index, array) {
      if(item.zone=="Paris"){
        nbAnnonceParis= item.nbrAnnonce;
        hrefParis= item.href;
      }
    });
    Il n'y aurait pas une façon plus directe ?

  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
    Si tu veux une valeur au choix, fais comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    let tabListZoneMap = {Paris:{href: "/paris",nbrAnnonce: 3},Marseille:{href: "/marseille",nbrAnnonce: 0},Lyon:{href: "/lyon",nbrAnnonce: 1}}
    console.log(tabListZoneMap.Paris);

  7. #7
    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
    Amuse-toi avec ces variantes, si tu veux:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    console.log(tabListZoneMap.Paris);
    console.log(Object.values(tabListZoneMap.Paris));
    console.log(Object.values(tabListZoneMap.Paris).toString());
    console.log(tabListZoneMap.Paris.nbrAnnonce);

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 49
    Par défaut
    Ok merci pour ton aide mais du coup, je pense que je vais quand même devoir passer par la solution de Toufik83 car le nom de la zone, je l'a récupère au format string via l'id d'une balise html.
    Je n'avais pas mis tout le code sur mon premier message pour éviter de surcharger le sujet mais en gros voici ce que j'essaie de faire.
    J'ai une carte SVG sur laquelle je dois afficher des infos bulles.

    Voici du coup le code que je pense utiliser. Est ce que ça vous semble optimisé ?

    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
    // tableau zone id
    //---------------------------
    let tabListZoneMap4 = [{
        zone: "Paris",
        href: "/paris",
        nbrAnnonce: 3
      },
      {
        zone: "Marseille",
        href: "/marseille",
        nbrAnnonce: 0
      },
      {
        zone: "Lyon",
        href: "/lyon",
        nbrAnnonce: 1
      }
    ];
     
    // hover sur la carte
    //---------------------------
    $( "#zoneCarte path" ).hover(function() {
     
    	var idZone=$(this).attr('id');
     
    	tabListZoneMap4.forEach(function(item, index, array) {
    	  if(item.zone==idZone){
    		var nbAnnonce= item.nbrAnnonce;
    		// afficher l'info bulle
    		if(nbAnnonce>0){
    			$("#bulle-"+idZone).show();
    		}
    	  }
    	});
     
    	return false;
    });

  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
    Je comprends mais il est gênant d'être obligé de boucler pour un événement "Hover"

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 49
    Par défaut
    oui c'est vrai qu'une boucle sur le hover, ce n'est pas terrible ^^
    Dans ce cas, il faut que j'utilise ma première solution avec deux tableaux.

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

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 496
    Par défaut
    Bonjour,

    Vous pouvez utiliser l'événement "mouseenter" qui se déclenche 1 seule fois lorsque le dispositif de pointage est déplacé et que son curseur entre sur l'élément, puis je pense que filter() est beaucoup mieux que forEach pour ce cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $('#zoneCarte path').on('mouseenter',function(){
       let idZone=$(this).attr('id'),
          data=tabListZoneMap4
          .filter(element=>element.zone==idZone&&element.nbrAnnonce>0);
       if(data.length)
          $("#bulle-"+idZone).show();
    })
    Attention, vous utilisez nbAnnonce dans la boucle (sans "r") alors que le nom est différent dans les éléments du tableau nbrAnnonce

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 49
    Par défaut
    merci pour votre aide, ça va me permettre d'optimiser mon code.

  13. #13
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 198
    Par défaut
    Bonjour,
    pourquoi ne pas passer par un objet dont les clés sont les ID des éléments, le code s'en retrouve allégé.
    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
    const data = {
      "Paris": {
        "href": "/paris",
        "nbrAnnonce": 3
      },
      "Marseille": {
        "href": "/marseille",
        "nbrAnnonce": 0
      },
      "Lyon": {
        "href": "/lyon",
        "nbrAnnonce": 1
      }
    }
     
    // hover sur la carte
    //---------------------------
    $("#zoneCarte path").hover(function() {
      const idZone = $(this).attr('id');
      const item = data[idZone];
      if (item) {
        // afficher l'info bulle
        if (item.nbrAnnonce > 0) {
          $("#bulle-" + idZone).show();
        }
      }
      return false;
    });

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 49
    Par défaut
    merci, je vais regarder ça

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

Discussions similaires

  1. tableau javascript
    Par allstar dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/01/2006, 05h39
  2. tableau javascripte
    Par ridondo dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/10/2005, 13h54
  3. Passage d'un tableau javascript en paramètres d'une URL
    Par seblo_scoqi dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 02/09/2005, 10h46
  4. [PHP-JS] Remplir un tableau javascript selon un tableau php
    Par jerome38000 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/01/2005, 14h02
  5. tableau javascript ecrit par une fonction asp
    Par LineLe dans le forum ASP
    Réponses: 4
    Dernier message: 03/11/2003, 08h38

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