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 :

Trier des données alphanumériques suivant la partie numérique de chacune de ces données


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Architecte sys d'info géographique
    Inscrit en
    Juin 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Architecte sys d'info géographique
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2011
    Messages : 64
    Par défaut Trier des données alphanumériques suivant la partie numérique de chacune de ces données
    Bonjour,
    je renseigne une variable
    j'appelle par Ajax, PHP, Postgresql un code current_track qui appelé "cat" sur Postgresql,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT cat FROM " . $_COOKIE['current_file'] ."_linestring WHERE cat = :cat"
    qui me retourne sous javascript le meme code, si il existe, ainsi "track3" sera retourné "track3" dans "result.responseText" si au moins une ligne de la table de Postgresql possede "track3" dans sa colonne cat. "error" me donne le résultat que je veux, et ca marche alors j'ai laissé ainsi.
    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
    function rowcounter() {
    rowcount = $.ajax({
      url: "../crud/dataservice/count_tracks.php",
      method: "GET",
      dataType: "json",
      data: {
          command: "LINESTRING",
          cat: current_track,
    currentfile: current_file
      },
      xhrFields: {
          withCredentials: true
      },
      username: null,
      password: null,
    error: function(result) {
    response2 = result.responseText;
                 console.log('success ' + response2);
    }
    });
    };
    J'ai donc inventé un script improbable pour savoir quel est le plus grand chiffre (track3, track8)

    mais çà ne marche pas
    comment savoir quel est le plus grand "track"?
    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
    function counterloop () {
    current_track = "track15"; rowcounter();
    if (response2 == "track15") {console_log('15');return;};
    current_track = "track14"; rowcounter();
    if (response2 == "track14") {console_log('14');return;};
    current_track = "track13"; rowcounter();
    if (response2 == "track13") {console_log('13');return;};
    current_track = "track12"; rowcounter();
    if (response2 == "track12") {console_log('12');return;};
    current_track = "track11"; rowcounter();
    if (response2 == "track11") {console_log('11');return;};
    current_track = "track10"; rowcounter();
    if (response2 == "track10") {console_log('10');return;};
    current_track = "track9"; rowcounter();
    if (response2 == "track9") {console_log('9');return;};
    current_track = "track8"; rowcounter();
    if (response2 == "track8") {console_log('8');return;};
    current_track = "track7"; rowcounter();
    if (response2 == "track7") {console_log('7');return;};
    current_track = "track6"; rowcounter();
    if (response2 == "track6") {console_log('6');return;};
    current_track = "track5"; rowcounter();
    if (response2 == "track5") {console_log('5');return;};
    current_track = "track4"; rowcounter();
    if (response2 == "track4") {console_log('4');return;};
    current_track = "track3"; rowcounter();
    if (response2 == "track3") {console_log('3');return;};
    current_track = "track2"; rowcounter();
    if (response2 == "track2") {console_log('2');return;};
    current_track = "track1"; rowcounter();
    if (response2 == "track1") {console_log('1');return;}
    };

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

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 511
    Par défaut
    Bonjour,
    Supposons que le retour d'ajax est un tableau avec la structure suivante [{cat:"track33"},{cat:"track4"},{cat:"track1"}].

    Vous pouvez trier le contenu en fonction de la valeur de la colonne "cat" avec sort :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    let response=[{cat:"track33"},{cat:"track4"},{cat:"track1"}];
    response=response.sort((a,b)=>a.cat>b.cat?-1:1);//si a.cat est supérieur à b.cat déplace le a avant b.
    console.log("le plus grand cat est :",response[0].cat);
    Sinon vous pouvez aussi faire la même opération en utilisant seulement le chiffre qui vient après "track" en utilisant replace et une simple expression régulière on peut remplacer tous les caractères de mots [a-zA-Z] par rien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    let response="track20"; 
    console.log(" replace :",response.replace(/[a-z]+/i,'')); //donne 20
    Puis je pense que ajax est mal utilisée, car tu utilise le type de donnée json dataType: "json" mais tu exploite le retour en tant que texte !

    Et pourquoi vous utilisez le callback error en tant que succès ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Architecte sys d'info géographique
    Inscrit en
    Juin 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Architecte sys d'info géographique
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2011
    Messages : 64
    Par défaut
    Merci, Toufik83, pour cette réponse particulièrement intéressante qui me donne une clé possible :

    récupérer un vrai tableau JSON , avec eventuellement seulement la colonne cat,

    contenant toutes les "track".

    ensuite, je fais un tri avec javascript et je récupère la 1ère !

    je teste ça dès que possible pour confirmer si tout va bien ;

    si je prend le template d'origine, le resultat ne sera plus considéré comme une "erreur".

    pour data:json récuperé en texte, c'était une inattention de ma part... comme parfois à l'origine je ne voulais que du texte mais je vais faire comme indiqué

  4. #4
    Membre confirmé
    Homme Profil pro
    Architecte sys d'info géographique
    Inscrit en
    Juin 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Architecte sys d'info géographique
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2011
    Messages : 64
    Par défaut
    Nom : screen33.jpg
Affichages : 152
Taille : 40,9 Ko

    je viens de récuperer un array, comment adapter votre code ?
    j'ai reussi a supprimer les elements de l'array qui ne commencent pas par "track" pour les exclure du tri, potentiellement il peut y avoir nimporte quel nom

    j'avais fait ainsi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var curcat = evt.layer.feature.properties.cat;
    if (curcat.match(/track.*/)) {
       arraytracks.push([evt.layer.feature.properties.cat]);
    votre code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    response=response.sort((a,b)=>a.cat>b.cat?-1:1);//si a.cat est supérieur à b.cat déplace le a avant b.
    console.log("le plus grand cat est :",response[0].cat);
    Nom : screen34.jpg
Affichages : 147
Taille : 11,4 Ko

  5. #5
    Membre confirmé
    Homme Profil pro
    Architecte sys d'info géographique
    Inscrit en
    Juin 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Architecte sys d'info géographique
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2011
    Messages : 64
    Par défaut
    Nom : screen37.jpg
Affichages : 140
Taille : 27,6 Ko

    je n'ai pas bien reussi a trier par ordre, 12 apparait plus petit que 2

    je serai pret a supprimer le mot track, ou n'accepter que les chiffres de 1 à 9.. mais je prefererai reussir à trier

    arraytracks.sort()
    arraytracks.reverse();

    je voudrais egalement recuperer le code du plus grand chiffre en texte brut plutot que json
    Images attachées Images attachées  

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

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

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

    1-Le retour parfait doit être un tableau d'objets et pas un tableau multidimensionnel, pour corriger ceci montrez le code PHP qui remplit le tableau.

    2-Vous pouvez filtrer le résultat de la requête SQL avec SQL en ajoutant la condition and cat!="" à la requête, et laissez JS s'occupe de la partie client.

  7. #7
    Membre confirmé
    Homme Profil pro
    Architecte sys d'info géographique
    Inscrit en
    Juin 2011
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Architecte sys d'info géographique
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2011
    Messages : 64
    Par défaut
    Merci.en effet la fonction sort avecbles parametres indiqués n'a pas fonctionné...

    Voila le code du php d'origine

    https://github.com/andyprasetya/leaf...linestring.php

    Toutes les colonnes sauf cat, peuvent etre retirés pour l output de la requete


    Pour le filtrage,,j'ai trouvé une solution , j'ai deja oublié ce quenj'ai fait precieement ms je filtre sur le json, il faut filtrer les "" mais aussi les "blabla" etc le cas echeant

    Edit: retrouve
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var curcat = evt.layer.feature.properties.cat;
    if (curcat.match(/track.*/)) {
       arraytracks.push([evt.layer.feature.properties.cat]);
    }

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/12/2019, 16h08
  2. Réponses: 0
    Dernier message: 25/10/2017, 16h11
  3. Quel est la plus grande entreprise
    Par lepierot dans le forum Développement Mobile
    Réponses: 0
    Dernier message: 04/09/2014, 15h19
  4. Réponses: 4
    Dernier message: 09/07/2014, 09h44
  5. Réponses: 121
    Dernier message: 25/05/2010, 08h39

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