I have an array of cars.
car = {
make: \"nissan\",
model: \"sunny\",
colour: \"red\"
};
How would I use underscore.js to grou
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.
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);
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" });