J'ai une gamme de voitures.
car = {
make: "nissan",
model: "sunny",
colour: "red"
};
Comment utiliser underscore.js pour grouper le tableau par couleur?
J'ai essayé quelques combos mais je ne sais pas vraiment comment spécifier ma condition d'itérateur:
var carsGroupedByColor = _.groupBy(cars, false, colour);
var carsGroupedByColor = _.groupBy(vars, false, function(cars){ return cars[colour]; };
Ils renvoient tous tout dans le tableau à chaque fois.
Vous n'avez pas besoin du second argument false
, ce qui suit fonctionnera:
var redCars = _.groupBy(cars, 'colour');
Notez que le deuxième paramètre peut être un function
ou un string
. S'il s'agit d'un string
groupes de soulignement par ce nom de propriété.
Tiré des documents:
Divise une collection en ensembles, groupés par le résultat de l'exécution de chaque valeur via l'itérateur . Si itérateur est une chaîne au lieu d'une fonction, il est regroupé par la propriété nommée par itérateur sur chacune des valeurs.
Voici un exemple de travail .
Je n'ai jamais utilisé de soulignement js mais ne serait-ce pas selon leurs documents
var groupedCars = _.groupBy(cars, function(car) { return car.make; });
En fait, je pense que cela est plus correct, car il indique que si l'itérateur est une chaîne, il regroupe plutôt la propriété de l'objet avec ce nom de chaîne.
var groupedCars = _.groupBy(cars, "make");
Si vous ne voulez que les voitures rouges (même si vous devriez vraiment utiliser un filtre, je suppose), vous pouvez faire ce qui suit
var redCars = groupedCars["red"];
Pour utiliser un filtre à la place
Examine chaque valeur de la liste, renvoyant un tableau de toutes les valeurs qui réussissent un test de vérité (itérateur). Délégué à la méthode de filtrage native, si elle existe.
var redCars = _.filter(cars, function(car) { return car.colour == "red" });
var data = [
{
"name": "jim",
"color": "blue",
"age": "22"
},
{
"name": "Sam",
"color": "blue",
"age": "33"
},
{
"name": "eddie",
"color": "green",
"age": "77"
},
{
"name": "Dheeraj",
"color": "blue",
"age": "25"
},
{
"name": "Suraj",
"color": "green",
"age": "25"
}
];
var result = _.groupBy(data,"color");
console.log(result);