web-dev-qa-db-fra.com

Utiliser le soulignement groupby pour grouper un tableau de voitures par leur couleur

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.

15
Jon Wells

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 .

35
jabclab

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" });
10
Jon Taylor
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);
2
Dheeraj Nalawade