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 :

Filtrer un objet JSON


Sujet :

JavaScript

  1. #1
    Membre �clair�
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    266
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 266
    Par d�faut Filtrer un objet JSON
    Salut !

    Je suis nouveau sur le d�veloppement WEB angular.

    Imaginons un json de cette forme :

    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
    [{	
    	"event1": "Tournoi Marseille",
    	"event2": "Tournoi Lyon",
    	"event3": "Tournoi Toulouse"	
    },
    {	
    	"event1": "Tournoi Marseille",
    	"event2": "Tournoi Lyon",
    	"event3": "Tournoi Nantes"	
    },
    {	
    	"event1": "Tournoi Paris",
    	"event2": "Tournoi Lyon",
    	"event3": "Tournoi Bastia"	
    },
    {	
    	"event1": "Tournoi Brest",
    	"event2": "Tournoi Lyon",
    	"event3": "Tournoi Grenoble"	
    }][
    puis un tableau contenant des mots cl�s :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    ["Lyon", "Marseille","Nantes"]
    Comment � l'aide de filters, some ou autres ne produire en sortie que les objets qui matchent avec ces trois keywords :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    [{	
    	"event1": "Tournoi Marseille",
    	"event2": "Tournoi Lyon",
    	"event3": "Tournoi Nantes"	
    }]
    Un tableau de keywords
    produirait alors
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [{	
    	"event1": "Tournoi Marseille",
    	"event2": "Tournoi Lyon",
    	"event3": "Tournoi Toulouse"	
    },
    {	
    	"event1": "Tournoi Marseille",
    	"event2": "Tournoi Lyon",
    	"event3": "Tournoi Nantes"	
    }]
    Merci de votre aide...

    Coincoin22

  2. #2
    Membre extr�mement actif
    Avatar de Sodium
    Femme Profil pro
    D�veloppeuse web
    Inscrit en
    Avril 2014
    Messages
    2 324
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activit� : D�veloppeuse web

    Informations forums :
    Inscription : Avril 2014
    Messages : 2 324
    Billets dans le blog
    1
    Par d�faut
    Bonjour,

    D�j� je n'utiliserais pas un objet avec des cl�s (event1, event2...) mais un tableau. Tu n'as pas besoin de ces cl�s, si tu boucles sur les items tu sais que le premier est ton event1, le deuxi�me event2 etc et tu n'as pas � r��crire ta configuration si tu veux changer le nombre d'events.

    Ensuite tu peux tester les noms avec la fonction indexOf() qui renvoie -1 si la string recherch�e n'a pas �t� trouv�e. https://www.w3schools.com/jsref/jsref_indexof.asp

  3. #3
    Membre �clair�
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    266
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 266
    Par d�faut
    Salut !
    Merci de ton aide ...

    L'exemple que je t'ai donn� est l� pour simplifier ma demande.
    Les json sont beaucoup plus complexes dans la r�alit�.

    il y a notamment des champs eq1, eq2, eventname, round sur lesquels je veux faire mon tri.

    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
    [{
    eq1: "Lyon"
    eq2: "Angers"
    eventid: 2
    eventname: "Ligue 1"
    match_id: 13
    round: "2ième Journée"
    score_eq1: null
    score_eq2: null
    ...
    },{
    eq1: "Marseille"
    eq2: "Brest"
    eventid: 1
    eventname: "Ligue 1"
    match_id: 6
    round: "1ière Journée"
    score_eq1: null
    score_eq2: null
    ...
    }...]
    J'ai bien 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
    13
    14
    var term = 'Ligue 1 2ième';
    var matchValue;
    var searchKeywords = term.split(' ');
    searchKeywords = searchKeywords.map(val => { return val.toString().toLowerCase();});
            var filtered = json.filter(item => {            
                matchValue = 0;            
                searchKeywords.forEach(function (word) {
                    matchValue = matchValue +  (item.eventname.toString().toLowerCase().includes(word) ||
                    item.round.toString().toLowerCase().includes(word) ||
                    item.eq1.toString().toLowerCase().includes(word) ||
                    item.eq2.toString().toLowerCase().includes(word)) ? 1 : 0;
                });           
                return (matchValue === searchKeywords.length)
            });
    Ce n'est pas tout � fait correct.

    - Si la recherche comporte un espace (�a ne doit pas poser probl�me au final)
    - Si �a matche plus que le nombre de terms

    Il faut �tre certains que TOUS les mots (term) sont l� au minimum une fois pour valider la recherche

    Pour une recherche "2i�me" => OK
    Pour une recherche Ligue 1 > NOK Le 1 pose probl�me ??!!

    Merci de ton aide encore !

    Coincoin22

  4. #4
    Expert confirm� Avatar de Toufik83
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 520
    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 520
    Par d�faut
    Salut,

    J'ai vu que ton code est un peu long...

    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
     
    let json=
    [{...}...],
    term="Ligue ière".split(" "),
    searchKeywords=term,
    matchValue,
    result=json.filter((elem,index)=>{
        matchValue=0;
        searchKeywords.map((v)=>{
         matchValue+=( elem.eq1.includes(v)
              || elem.eq2.includes(v)
              ||elem.eventname.includes(v)
              ||elem.round.includes(v))?1:0;
        });
      return matchValue==searchKeywords.length;
    });
    console.log(result);
    Edit : sans trop de parenth�ses, �a donne �a.

  5. #5
    Membre �clair�
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    266
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 266
    Par d�faut
    Merci Toufik,

    Ce n'est pas tout � fait ce que je veux... Il faut que TOUS les mots cl�s soient dans l'item pas un ou plusieurs.

    Sur mon code, il manquait une parenth�se avant item et apr�s 0.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    searchKeywords.forEach(function (word) {
                    matchValue = matchValue +  ((item.eventname.toString().toLowerCase().includes(word) ||
                    item.round.toString().toLowerCase().includes(word) ||
                    item.eq1.toString().toLowerCase().includes(word) ||
                    item.eq2.toString().toLowerCase().includes(word)) ? 1 : 0);
                });
    �a fait le job !
    Merci les amis !

    A+
    Coincoin22

  6. #6
    Membre extr�mement actif
    Avatar de Sodium
    Femme Profil pro
    D�veloppeuse web
    Inscrit en
    Avril 2014
    Messages
    2 324
    D�tails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activit� : D�veloppeuse web

    Informations forums :
    Inscription : Avril 2014
    Messages : 2 324
    Billets dans le blog
    1
    Par d�faut
    Je n'ai pas compris le tiers de ce que tu as racont� mais heureuse que �a marche pour toi

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [AJAX] Filtrer un objet Json
    Par chok71 dans le forum jQuery
    R�ponses: 0
    Dernier message: 04/09/2014, 15h59
  2. [POO] Objet json , comment instancier un nouvel objet ?
    Par le_chomeur dans le forum G�n�ral JavaScript
    R�ponses: 15
    Dernier message: 29/10/2008, 10h19
  3. retourner objet Json via ajax ? hmm
    Par Myfred dans le forum G�n�ral JavaScript
    R�ponses: 18
    Dernier message: 25/06/2008, 11h06
  4. [POO] Restaurer un objet JSon en javascript
    Par GandalfZeGrey dans le forum G�n�ral JavaScript
    R�ponses: 0
    Dernier message: 21/01/2008, 15h14
  5. [POO] lecture objet json
    Par taouja dans le forum G�n�ral JavaScript
    R�ponses: 1
    Dernier message: 10/12/2007, 11h32

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