2010-07-23 8 views
1

J'utilise .grep $() pour retirer un ensemble de résultats JSON comme ceci:jQuery générer dynamiquement grep()

myObject.appJSON = jQuery.grep(myObject.appJSON, function (a) { 
     return a.category == "Entertainment"; 
    }); 

et il fonctionne très bien. Mais ce que je veux vraiment faire finalement, c'est avoir plusieurs cases à cocher afin que je puisse filtrer sur plusieurs choses différentes. Je me rends compte à faire que je peux faire quelque chose comme:

myObject.appJSON = jQuery.grep(myObject.appJSON, function (a) { 
     return (a.category == "Entertainment" && a.category == "Business"); 
    }); 

Mais ma vraie question ici est de savoir comment se produire ceci dynamique, donc je peux essentiellement construire une chaîne de fonctionnalités pour le grep revenir. Peut-être que je montre à quel point je suis novice, mais ce serait presque génial de pouvoir générer la longue chaîne de filtre, puis de l'insérer dans le retour. On dirait que c'est maintenant, le retour doit être codé en dur. Je me rends compte que c'est probablement simple mais il y a très peu de choses sur le net sur la façon de faire ce genre de chose. Merci d'avance!

Répondre

2

Vous pouvez rechercher un tableau comme celui-ci:

myObject.appJSON = jQuery.grep(myObject.appJSON, function (a) { 
    return $.inArray(a.category, someArray) > -1; 
}); 
+0

Merci. Donc, fondamentalement, j'ai juste besoin d'un tableau comme celui-ci et cela devrait fonctionner? var someArray = ['Divertissement']; Parce que quand je fais cela, il retourne un tableau avec une longueur de 0. – Munzilla

+0

En fait, je pense que c'est juste que vous avez les deux choses retournées dans $ .inArray. Il devrait être $ .inArray (une.catégorie, someArray)> -1; – Munzilla

+0

@Munzilla: Vous avez raison; fixé. – SLaks

0

Vous pourrait utiliser eval() pour créer votre logique grep dynamiquement. Ou vous pourrait créer une expression régulière correspondant à toutes vos catégories. Mais la chose la plus simple à faire est de créer un objet qui contient vos catégories et de vérifier si a.category en fait partie.

var categories = { 
    "Entertainment": 1, 
    "Business":  1 
}; 
myObject.appJSON = jQuery.grep(myObject.appJSON, function (a) { 
    return categories[a.category]; 
}); 
+0

Votre syntaxe est erronée. – SLaks

+0

@SLaks L'ancien éditeur "ed" utilisé pour représenter toutes les erreurs avec rien d'autre qu'un '?'. Votre interface utilisateur n'est pas beaucoup mieux. – Schwern

0

Je pense que vous pouvez regexp le match:

var filter = function(categories) { 
    var obj = []; 
    $.each(categories.split(' '), function(cat) { 
     obj.push(jQuery.grep(myObject.appJSON, function (a) { 
      return cat.test(a.category); 
     })); 
    }); 
    return obj; 
} 

var filtered_array = filter('Entertainment Business'); 
Questions connexes