Comment filtrer un tableau d'objets basée sur les attributs?
J'ai le code JavaScript suivant tableau de l'immobilier objets à la maison:
var json = {
'homes': [{
"home_id": "1",
"price": "925",
"sqft": "1100",
"num_of_beds": "2",
"num_of_baths": "2.0",
}, {
"home_id": "2",
"price": "1425",
"sqft": "1900",
"num_of_beds": "4",
"num_of_baths": "2.5",
},
//... (more homes) ...
]
}
var xmlhttp = eval('(' + json + ')');
homes = xmlhttp.homes;
Ce que je voudrais faire est d'être en mesure d'effectuer un filtre sur l'objet à retourner un sous-ensemble de la "maison" des objets.
Par exemple, je veux être en mesure de filtre basé sur: price
, sqft
, num_of_beds
, et num_of_baths
.
Comment puis-je faire quelque chose en JavaScript, comme le pseudo-code ci-dessous:
var newArray = homes.filter(
price <= 1000 &
sqft >= 500 &
num_of_beds >=2 &
num_of_baths >= 2.5 );
Note, la syntaxe n'a pas à être exactement comme ci-dessus. C'est juste un exemple.
- Cela semble presque identique à stackoverflow.com/questions/1694717/...
var json = { ... }
JSON est un texte de notation pour l'échange de données. (ici.) Si vous avez affaire à code source JavaScript, et de ne pas traiter avec une chaîne, vous n'êtes pas affaire avec JSON.- Ne pas utiliser la fonction eval. C'est généralement une mauvaise pratique et peut causer des problèmes de performance. Nous avons juste eu à se débarrasser d'un tas de personnes sur un projet parce que le processeur est enfermer.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le
Array.le prototype.filtre
méthode:Live Exemple:
JS:
Cette méthode fait partie de la nouvelle ECMAScript 5e Édition standard, et peuvent être trouvés sur presque tous les navigateurs modernes.
Pour IE, vous pouvez inclure la méthode suivante pour la compatibilité:
Array.prototype.filter.length == 1;
). Lorsque vous utilisez la deuxième argument, il sera utilisé commethis
valeur à l'intérieur de la fonction de rappel..filter(function(object) {})
retournetrue
il sera tenu, si elle renvoiefalse
il sera pas être conservésVous pouvez essayer d'utiliser des framework comme jLinq - après est un exemple de code de l'aide jLinq
Pour plus d'informations, vous pouvez suivre le lien http://www.hugoware.net/projects/jlinq
Je préfère le trait de Soulignement cadre. Il suggère de nombreuses opérations avec des objets.
Votre tâche:
peut être écrasement optionnel des fichiers pdf comme:
Espère que ce sera utile pour vous!
underscore-query
(github.com/davidgtonge/underscore-query) qui utilise MongoDB syntaxe de requête tableaux javascript. Donc, ici, vous pouvez utiliser_.query(homes, {price: {$lt:1000}, sqft: {$gte: 500}, num_of_beds: {$gte:2}, num_of_baths: {$gte: 2.5}}
ici, c'est le travail de violon qui fonctionne très bien avec IE8 à l'aide de jquery fonction MAP
http://jsfiddle.net/533135/Cj4j7/
Vous pouvez le faire assez facilement - il y a probablement de nombreuses implémentations, vous pouvez choisir, mais c'est mon idée à la base (et il y a probablement un format où vous pouvez effectuer une itération sur un objet avec jQuery, j'ai juste ne peux pas penser à ça maintenant):
Et puis vous pouvez appeler cette fonction comme suit:
De cette façon, vous pouvez appeler le filtre, quel qu'en soit le prédicat de vous définir, ou même filtre plusieurs fois à l'aide de petits filtres.
Vous pouvez utiliser jQuery.grep() depuis jQuery 1.0:
Vous pouvez mettre en œuvre une méthode de filtre vous-même qui répond à vos besoins, voici comment:
De l'espoir, ça aide!
Vous devriez vérifier OGX.Liste qui a construit dans les méthodes de filtrage et étend la norme tableau javascript (et aussi de regroupement, de tri et de recherche). Voici une liste des opérateurs il prend en charge les filtres:
Vous pouvez l'utiliser de cette façon
Ou même de cette façon
Ou comme un liner
Ou vous pouvez simplement utiliser
$.each
(qui fonctionne également pour les objets, pas seulement des tableaux) et de construire un nouveau tableau comme suit:Je suis surpris que personne n'a posté la réponse d'une ligne:
...et juste pour que vous pouvez le lire, il est plus facile:
Vous pouvez utiliser cette fonction lambda. Plus de détails peuvent être trouvés ici puisque nous sommes le filtrage de la base de données sur vous avez une condition qui retourne true ou false et il permettra de recueillir les données dans le tableau différent, de sorte que votre tableau ne peut pas être modifié.
@JGreig Veuillez regarder.