0
votes

Filtre à plusieurs conditions

J'utilise plusieurs cases à cocher pour filtrer la fonction de livres de livres. xxx

https://codepen.io/aksultan/pen/nwkezgg

Il ne doit que renvoyer un seul livre, lorsque les deux cases à cocher sont utilisées, mais maintenant il renvoie toutes les données complètes.

Merci


1 commentaires

Eh bien, this.filters.option.length n'est pas > 0 et vous retournerez donc toujours vrai , gardant chaque valeur. Qu'est-ce que vous essayez exactement de filtrer?


3 Réponses :


0
votes

Il semble que votre filtre est incorrect.

Pour simplifier les fins, j'ai divisé en 2 filtres séquentiels, un pour chaque case: P>

computed:{
    booksFilter(){
      return this.books.filter(x => {
        if(this.filters.options.length && this.filters.options.indexOf(0)!=-1){
          return x.price>1000;
        }
        else{
          return true;
        }  
      }).filter(x => {
        if(this.filters.options.length && this.filters.options.indexOf(1)!=-1){
          return x.name == "Book1";
        }
        else{
          return true;
        }  
      })
    }
  }  


3 commentaires

Pourquoi rendre le code redondant? Voir ma réponse qui a un calcul unique.


Chaque morceau de code pourrait être redondant et peut être rendu plus compact, c'est pourquoi j'ai noté dans ma réponse que j'ai divisé le code pour simplement comprendre le problème avec la condition


Oui, mais s'il dispose de 10 cases à cocher, il utilisera des filtres enchaînant pour les enchaîner une par une. Ce qui n'est pas une bonne approche, la construction d'une clause sera la meilleure. N'est-ce pas?



0
votes

Mettez à jour votre logique comme celle-ci pour obtenir le résultat: xxx

this.filters.option.indexof (0) === -1 || X.Prix> 1000 - Filtre 0 n'est pas sélectionné, renvoie True ou filtre par Price
et
this.filters.option.indexof (1) === -1 || x.name === "book1" - filtre 1 n'est pas sélectionné, renvoie true ou filtre par nom


0 commentaires

1
votes

Qu'en est-il de: xxx

espère que cela résoudra votre cas.


0 commentaires