使用下划线groupby按颜色分组汽车数组

时间:2012-07-20 15:23:25

标签: javascript iterator underscore.js

我有一系列汽车。

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

我如何使用underscore.js按颜色对数组进行分组?

我尝试了几个组合,但我不确定如何指定我的迭代器条件:

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

每次都返回数组中的所有内容。

3 个答案:

答案 0 :(得分:33)

您不需要false第二个参数,以下内容将起作用:

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

请注意,第二个参数可以是functionstring。如果它是该属性名称的string下划线组。

取自文档:

  

将集合拆分为集合,按运行每个集合的结果进行分组   价值通过迭代器。如果迭代器是字符串而不是函数,   在每个值上由迭代器命名的属性组。

这是working example

答案 1 :(得分:11)

我从未使用过下划线js,但它不会按照他们的文档

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

事实上,我认为这更正确,因为它声明如果迭代器是一个字符串而不是由具有该字符串名称的对象中的属性分组。

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

如果你只想要红色汽车(即使你真的应该使用过滤器我猜),那么你可以做以下事情

var redCars = groupedCars["red"];

改为使用过滤器

  

查看列表中的每个值,返回通过真值测试(迭代器)的所有值的数组。委托自然过滤器方法(如果存在)。

var redCars = _.filter(cars, function(car) { return car.colour == "red" });

答案 2 :(得分:2)

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