Utilisation du filtre croisé pour renvoyer dynamiquement les résultats en JavaScript

Je pense que l'explication de l'API de la bibliothèque crossfilter est écrite pour quelqu'un au-dessus de mes compétences, mais je sais aussi que ma maîtrise résoudra mon problème.

Pour simplifier, je ferai référence aux données d'exemple de la page API pour cette question.

var payments = crossfilter([ {date: "2011-11-14T16:17:54Z", quantity: 2, total: 190, tip: 100, type: "tab"}, {date: "2011-11-14T16:20:19Z", quantity: 2, total: 190, tip: 100, type: "tab"}, {date: "2011-11-14T16:28:54Z", quantity: 1, total: 300, tip: 200, type: "visa"}, {date: "2011-11-14T16:30:43Z", quantity: 2, total: 90, tip: 0, type: "tab"}, {date: "2011-11-14T16:48:46Z", quantity: 2, total: 90, tip: 0, type: "tab"}, {date: "2011-11-14T16:53:41Z", quantity: 2, total: 90, tip: 0, type: "tab"}, {date: "2011-11-14T16:54:06Z", quantity: 1, total: 100, tip: 0, type: "cash"}, {date: "2011-11-14T16:58:03Z", quantity: 2, total: 90, tip: 0, type: "tab"}, {date: "2011-11-14T17:07:21Z", quantity: 2, total: 90, tip: 0, type: "tab"}, {date: "2011-11-14T17:22:59Z", quantity: 2, total: 90, tip: 0, type: "tab"}, {date: "2011-11-14T17:25:45Z", quantity: 2, total: 200, tip: 0, type: "cash"}, {date: "2011-11-14T17:29:52Z", quantity: 1, total: 200, tip: 100, type: "visa"} ]); 

Je peux renvoyer des enregistrements qui correspondent à une clé spécifique (quantité, total, etc.), mais je ne comprends pas comment renvoyer des résultats qui correspondent à une combinaison de paires de clés / valeurs. Par exemple, comment puis-je renvoyer le jeu de résultats qui correspond aux résultats avec une quantité de plus de 1, un total égal à 90, un tip égal à 0 et un type d'onglet? C'est là que je suis complètement perdu.

Comme toujours, toute aide serait appréciée.

Vous pouvez créer une dimension pour chaque attribut, puis appeler la méthode de filtrage de chaque dimension avec les critères de filtre correspondants que vous avez indiqués.

 var payments_by_quantity = payments.dimension(function(d){return d.quantity}), payments_by_total = payments.dimension(function(d){return d.total}), payments_by_tip = payments.dimension(function(d){return d.tip}), payments_by_type = payments.dimension(function(d){return d.type}); payments_by_quantity.filter([1, Infinity]); payments_by_total.filter(90); payments_by_tip.filter(0); payments_by_type.filter("tab"); payments_by_type.top(Infinity) 

Les effets sont cumulatifs, de sorte que la dernière ligne est en fait le résultat de toutes les valeurs respectant tous les filtres de toutes les dimensions.

J'ai trouvé la réponse ci-dessus précise mais inexacte pour moi en tant que débutant, c'est-à-dire que j'ai obtenu des résultats inattendus ou inattendus (sans manquements à slo-jo, mais j'écris d'un point de vue débutant car je suis un crossfilter nube). Les obstacles sont la nécessité d'effacer les filtres avant d'appeler certains filtres (vous devrez étendre le jeu de données avec plus de variété, par exemple différents conseils, totaux etc. pour voir ce que je veux dire). La sortie sur la console m'aide.

Voici ce qui m'aide à comprendre:

  var data = [ {date: "2011-11-14T16:17:54Z", quantity: 2, total: 190, tip: 100, type: "tab"}, {date: "2011-11-14T16:20:19Z", quantity: 2, total: 190, tip: 100, type: "tab"}, {date: "2011-11-14T16:28:54Z", quantity: 1, total: 300, tip: 200, type: "visa"}, {date: "2011-11-14T16:30:43Z", quantity: 222, total: 990, tip: 0, type: "tab"}, {date: "2011-11-14T16:48:46Z", quantity: 2, total: 90, tip: 0, type: "tab"}, {date: "2011-11-14T16:53:41Z", quantity: 5, total: 90, tip: 0, type: "tab"}, {date: "2011-11-14T16:54:06Z", quantity: 1, total: 100, tip: 0, type: "cash"}, {date: "2011-11-14T16:58:03Z", quantity: 2, total: 90, tip: 0, type: "tab"}, {date: "2011-11-14T17:07:21Z", quantity: 2, total: 90, tip: 0, type: "tab"}, {date: "2011-11-14T17:22:59Z", quantity: 2, total: 990, tip: 0, type: "tab"}, {date: "2011-11-14T17:25:45Z", quantity: 2, total: 200, tip: 0, type: "cash"}, {date: "2011-11-14T17:29:52Z", quantity: 1, total: 200, tip: 100, type: "visa"} ]; <script type="text/javascript"> // questions: For instance, how would I return the result set that matched results with a quantity more than 1, a total equal 90, a tip equal 0 and a type of tab? // create dimensions for each attribute var payments_by_quantity = payments.dimension(function(d){return d.quantity}); payments_by_total = payments.dimension(function(d){return d.total}), payments_by_tip = payments.dimension(function(d){return d.tip}), payments_by_type = payments.dimension(function(d){return d.type}); //need top(Infinity) to print out contents of filtered items var morethan1 = payments_by_quantity.filter([1, Infinity]).top(Infinity); console.log("morethan1",morethan1); var tot_eq_90 = payments_by_total.filter(90).top(Infinity); console.log("tot_eq_90",tot_eq_90); // clear filters. If not, the result below will still be filtered by totals = 90 payments_by_total.filterAll(); console.log("top1= biggest paymt qty:", payments_by_quantity.top(1)); payments_by_total.filterAll(); console.log("top2= biggest paymt qty:", payments_by_quantity.top(2)); payments_by_total.filterAll(); console.log("bottom paymt tip:", payments_by_tip.bottom(1)); var tip_eq_0 = payments_by_tip.filter(0).top(Infinity); console.log("tip_eq_0",tip_eq_0); payments_by_total.filterAll(); var typetab = payments_by_type.filter("tab").top(Infinity); console.log("typetab",typetab); payments_by_total.filterAll(); var typetab_i = payments_by_type.top(Infinity); console.log("typetab+i",typetab_i);