0
votes

Comment construire de manière dynamique l'expression de filtre d'array dans JavaScript

J'ai besoin d'une fonction pour filtrer mon tableau et renvoyer les résultats en fonction des entrées utilisateur.

var Myarray= [
  {Date:"1-Jan-2020",Name:"A", Id: 1},
  {Date:"1-Feb-2020",Name:"B", Id: 2},
  {Date:"1-Mar-2020",Name:"C", Id: 3}
  ...
]


1 commentaires

Partager vos recherches aide tout le monde. Dites-nous ce que vous avez essayé et pourquoi cela n'a pas répondu à vos besoins. Cela démontre que vous avez pris le temps d'essayer de vous aider, cela nous évite de réitérer des réponses évidentes, et surtout, il vous aide à obtenir une réponse plus spécifique et plus pertinente! Voir aussi Comment demander .


3 Réponses :


0
votes

Essayez:

var filteredArray = Myarray.filter(function (item) {
   return item.Date !== undefined && item.Name !== undefined;
});
var filteredArrayWithOptionalId = Myarray.filter(function (item) {
   return item.Date !== undefined && item.Name !== undefined && item.Id !== undefined;
});


2 commentaires

J'ai ajouté plus d'informations à ma question. s'il te plaît vérifie le


Ok, cette solution aide-t-elle mieux? J'ai fait deux matrices, une avec l'attribut facultatif et un sans.



0
votes

const Myarray= [
  {Date:"1-Jan-2020",Name:"A", Id: 1},
  {Date:"1-Feb-2020",Name:"B", Id: 2},
  {Date:"1-Mar-2020",Name:"C", Id: 3}
];

const customFilter = (array, expr) => {
  if (Object.keys(expr).length == 0) {
    console.log("Error! missing at least one filter expression");
    return null;
  }
  /* if expression doesn't exist it's a pass for all items */
  return array.filter(item => !expr.Date || item.Date == expr.Date).filter(item => !expr.Name || item.Name == expr.Name).filter(item => !expr.Id || item.Id == expr.Id)
}

console.log(customFilter(Myarray, {Date: "1-Jan-2020", Name: "B"}))
console.log(customFilter(Myarray, {Date: "1-Jan-2020"}))
console.log(customFilter(Myarray, {Name: "B"}))
console.log(customFilter(Myarray, {Id: 3}))
console.log(customFilter(Myarray, {}))


3 commentaires

Je n'ai pas besoin d'un journal de messagerie de validation. L'expression du filtre doit être construite de manière dynamique pour toutes les entrées utilisateur en fonction des conditions que j'ai fournies dans le résumé. En outre, l'ID est facultatif, mais il doit être traité dans la fonction si l'utilisateur souhaite l'utiliser.


Vous devez être plus précis lorsque vous avez posté une question. Fournissez quelques exemples de paires d'entrée / sortie. Il existe de nombreuses façons différentes que l'on peut interpréter ce que vous demandez en termes de codage.


J'ai une interface utilisateur. L'utilisateur aura des paramètres de recherche à choisir pour renvoyer data.date, nom et id.user doit choisir au moins la date ou le nom.ID est facultatif mais doit être pris en compte dans la fonction qui accepte les paramètres envoyés.Après des valeurs d'entrée utilisateur, elles sont envoyées à JS fonction qui filtre la matrice qui contient des données. Une fois les filtres appliqués à la matrice, un nouveau tableau est rempli de données filtrées. EX.Utiliser envoie la date sans nom orid, puis tableau uniquement des filtres à date.ex2.user envoie le nom sans date ou ID, puis tableau uniquement des filtres sur nom.ex3 Utilisateur Envoi d'identifiant, FunTrction ne permettra pas d'envoyer ID sans date et Nom



0
votes

Vous pouvez utiliser array.pototype.some code> (ou) pour les prédicats de chaîne. Si, à tout moment, des correspondances de prédicat, l'ensemble de l'article sera ajouté à la liste résultante.

Si vous souhaitez que toutes les conditions correspondent, vous devrez utiliser array.pototype.fry code> (et) Enchaînant. P>

Je peux revenir à cela, avec un exemple plus dynamique, sous peu. Strike> Voir ci-dessous. P> P> P> P>

.as-console-wrapper { top: 0; max-height: 100% !important; }


4 commentaires

Votre solution semble bonne mais je suis assez nouveau à JS et je ne comprends pas beaucoup. De plus, je ne peux pas voir comment vous avez géré le paramètre ID en option? J'attendrai votre exemple plus dynamique


@Mutasemsallam Si l'ID est facultatif, vous ne le filtrez pas du tout.


Pouvez-vous commenter vos commentaires dans votre code sur la façon dont chaque ligne fonctionne? Je ne peux pas le comprendre. Oui, l'identifiant est facultatif mais l'utilisateur peut toujours le choisir s'il le souhaite. Donc, il faut envisager si le paramètre IT n'est pas null


J'ai ajouté plus d'informations à ma question. s'il te plaît vérifie le