Underscore.js .filter() et .()
J'ai un tableau de event
des objets appelés events
. Chaque event
a markets
, un tableau contenant market
objets. À l'intérieur il y a ici un autre tableau appelé outcomes
, contenant outcome
objets.
Dans cette question, j'ai demandé une [Underscore.js] pour trouver des événements qui ont marchés qui ont des résultats qui ont une propriété nommée test
. La réponse a été:
//filter where condition is true
_.filter(events, function(evt) {
//return true where condition is true for any market
return _.any(evt.markets, function(mkt) {
//return true where any outcome has a "test" property defined
return _.any(mkt.outcomes, function(outc) {
return outc.test !== "undefined" && outc.test !== "bar";
});
});
});
Cela fonctionne très bien, mais je me demandais comment je pourrais le modifier si je voulais filtrer les résultats pour chaque marché, de sorte que market.outcomes
stockées uniquement les résultats qui ont été égale à bar
. Actuellement, c'est tout ça, ce sont des marchés qui ont des résultats qui ont certains ensemble test
propriétés. Je tiens à dépouiller ceux qui ne le font pas.
.any()
rappel des références à des "résultats", mais le paramètre est "outc" ...Aussi, cela mis à part, il semble que vous avez juste besoin de passer d'un
.any()
à .all()
avec une condition contraire. En d'autres termes, allez les " ... " à "tous ceux qui ne le sont pas ..."Désolé, faute de frappe....
Pouvez-vous me donner un exemple? Pas sûr de ce que tu veux dire par "en face de condition".
Voulez-vous retirer de la événements / marchés array(s) ou voulez-vous créer une nouvelle structure contenant ces résultats?
OriginalL'auteur | 2012-05-30
Vous devez vous connecter pour publier un commentaire.
De faire une simple boucle, à l'aide de la la méthode splice pour le tableau de déménagements:
Ce code permet de supprimer tous les résultats qui n'ont pas de
test
de la propriété, toutes vides marchés et dans toutes les manifestations de laevents
tableau.Un trait de Soulignement version pourrait ressembler à ça:
Oui, c'est possible. Mais le trait de soulignement fonction de filtre crée de nouvelles instances d'array, puis va remplacer l'obsolète tableaux, au lieu de simplement supprimer des éléments à partir d'eux.
Rien de mal à ne pas la mutation de données
Cela peut ou peut ne pas être ce qui est nécessaire, la différence peut être importante.
OriginalL'auteur Bergi