简体   繁体   中英

Using underscore groupby to group an array of cars by their colour

I have an array of cars.

car = {
    make: "nissan",
    model: "sunny",
    colour: "red"
};

How would I use underscore.js to group the array by colour?

I've tried a few combos but I'm not really sure how to specify my iterator condition:

var carsGroupedByColor = _.groupBy(cars, false, colour);
var carsGroupedByColor = _.groupBy(vars, false, function(cars){ return cars[colour]; };

They all return everything in the array each time.

You don't need the false second argument, the following will work:

var redCars = _.groupBy(cars, 'colour');

Note that the second parameter can either be a function or a string . If it's a string Underscore groups by that property name.

Taken from the docs:

Splits a collection into sets, grouped by the result of running each value through iterator . If iterator is a string instead of a function, groups by the property named by iterator on each of the values.

Here's a working example .

I've never used underscore js but would it not be as per their docs

var groupedCars = _.groupBy(cars, function(car) { return car.make; });

In fact I believe this ir more correct since it states that if the iterator is a string instead it groups by the property in the object with that string name.

var groupedCars = _.groupBy(cars, "make");

If you then want just the red cars (even though you really should be using a filter I guess) then you can do the following

var redCars = groupedCars["red"];

To use a filter instead

Looks through each value in the list, returning an array of all the values that pass a truth test (iterator). Delegates to the native filter method, if it exists.

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);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM