15

我有一系列汽车。

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]; };

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

4

3 回答 3

38

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

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

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

取自文档:

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

这是一个工作示例

于 2012-07-20T15:31:56.810 回答
10

我从未使用过下划线 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" });
于 2012-07-20T15:30:34.483 回答
3
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);
于 2016-02-01T07:09:44.853 回答