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 :

Traiter variable via une fonction


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2018
    Messages : 29
    Par défaut Traiter variable via une fonction
    Bonjour,


    Disclaimer : Je débute en js, suis plutôt back


    J'essaie de faire une petite fonction, mais le résultat ne correspond pas à ce que j'attends

    Dans mon html, je récupère plusieurs variables via data-set :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    let {lat, lng, price, id} = $item.dataset
    Je voudrais faire une function pour traiter l'affichage du prix, qui peut être soit renseigné, soit vide. S'il est renseigné, je voudrais afficher price + € sinon N.C.
    Voilà ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function testNum(price) {
      if (!price || price !== 0){
        let price = (price + ' €')
        return price
      }
      else
      {
        let price = 'N.C.'
        return price
      }
    }
    A ce niveau, console.log retourne undefined pour toutes les données.

    Je ne vois pas ce qui cloche

  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
    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 testNum(price) {
      if (!isNaN(price) && price.length>0 && price !== 0){
        price = (price + ' €')
     
      }
      else
      {
        price = 'N.C.'
     
      }
      return price
      }
     
      console.log(testNum(""));
    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
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2018
    Messages : 29
    Par défaut
    Merci à tous les deux pour votre retour.
    C'est tjrs intéressant de voir comment on peut traiter le même problème avec différentes approches.
    Du coup, j'ai fait deux fonctions que j'ai encapsulé, mais je ne sais pas si c'est une bonne pratique en js.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function havePrice(price) {
      if (price && price !== 0) {
        return true
      }
      else {
        return false
      }
    }
     
    function displayPrice(havePrice) {
      return (havePrice ? (price + ' €') : "N.C.");
    }
    Il y peut être moyen de factoriser encore... je ne sais pas...


    Par contre j'ai une autre question, un peu différente mais dans la suite logique.

    Je souhaite afficher des popups (avec le prix ou pas) sur une map avec leaflet. Jusque là, pas de soucis...

    Sur cette map, je récupère également 2 types de points.

    J'ai donc fait, une function pour récupérer le type de point. En fonction du type, je voudrais afficher différemment les popups.

    J'ai donc une const popup :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    const popup = L.popup({
      className: 'marker',
      maxWidth: 100
    })
      .setLatLng([lat, lng])
      .setContent(displayPrice(havePrice(price)))
      .openOn(map)
    Quelle serait la meilleure approche, sachant qu'en fonction du type de point, la popup est la même, sauf pour className: "tow_marker" et le setContent(name). J'ai juste ces deux données qui changent.

    Est ce que je fais des functions par type et j'injecte dans la const ?
    Je traite directement le if dans la const ?

    Quelle est la meilleure pratique ?

    J'ai tenté un truc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function poiType(poitype, price){
      if (poitype == "Town") {
        let m = "town-marker"
        let c = name
        return [m, c]
      }
      else {
        let m = "marker"
        let c = displayPrice(havePrice(price))
        return [m, c]
      }
    }
    mais dans tous les cas je passe en false

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 207
    Par défaut
    Bonjour,
    Il y peut être moyen de factoriser encore... je ne sais pas...
    je ne vois pas bien, sur ce coup, l’intérêt de passer par deux fonctions !


    Par contre j'ai une autre question, un peu différente mais dans la suite logique.
    Poser plusieurs questions dans un seul et même fil nuit grandement à la qualité du forum : notamment, lors d'une recherche, tout le contenu du fil n'est pas indiqué dans le titre, elle devient donc plus ardue.

    Notre but est de maintenir une base de connaissances facile à exploiter par tous les visiteurs, utilisable par tous. Vous avez pu bénéficier de ce forum en posant vos questions, laissez la possibilité aux suivants de bénéficier des réponses en leur offrant un sujet moins dispersé.

    une discussion = une question

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mars 2018
    Messages : 29
    Par défaut
    Citation Envoyé par NoSmoking Voir le message
    je ne vois pas bien, sur ce coup, l’intérêt de passer par deux fonctions !
    Je risque d'avoir besoin de la fonction havePrice ailleurs, puis c'est une habitude pour moi de découper autant se faire se peut les functions.


    Citation Envoyé par NoSmoking Voir le message
    Poser plusieurs questions dans un seul et même fil nuit grandement à la qualité du forum : notamment, lors d'une recherche, tout le contenu du fil n'est pas indiqué dans le titre, elle devient donc plus ardue.
    J'entends bien, mais comme c'est une suite logique avec le début de ma question, mais si ça pose souci, je peux la recopier dans un nouveau fil ?

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Citation Envoyé par Benji12 Voir le message
    Je risque d'avoir besoin de la fonction havePrice ailleurs, puis c'est une habitude pour moi de découper autant se faire se peut les functions.
    Je pense aussi qu'il n'y a pas vraiment d’intérêt à faire cela dans ce cas précis... Cela n'est pas plus lisible (au contraire), c'est moins rapide, cela oblige à faire deux appels de fonctions...

    De plus la variable "price" dans la fonction displayPrice n'est pas définie...

    EDIT : J'ai supprimé une partie du message...

  7. #7
    Membre Expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 910
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 910
    Par défaut
    Exemple :

    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function testNum(price) {
      if (price && price !== 0){     
        return price + ' €'
      }
      else
      {     
        return 'N.C.'
      }
    }
     
    console.log(testNum(0));// affiche "N.C."
    console.log(testNum(3));// affiche "3 €"
    console.log(testNum());// affiche "N.C."

Discussions similaires

  1. Réponses: 7
    Dernier message: 11/09/2015, 15h09
  2. [AS2] déclarer des variables dans une fonction
    Par ooyeah dans le forum ActionScript 1 & ActionScript 2
    Réponses: 12
    Dernier message: 02/08/2005, 12h50
  3. retour de variable d'une fonction
    Par thunderblade dans le forum ASP
    Réponses: 4
    Dernier message: 28/04/2005, 13h27
  4. Réponses: 7
    Dernier message: 20/03/2005, 14h53
  5. Réponses: 5
    Dernier message: 09/02/2005, 18h50

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