通过它们的颜色使用下划线GROUPBY到组汽车的数组(Using underscore groupb

2019-06-26 10:17发布

我有车的数组。

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

他们所有的阵列中的每个时间返回的一切。

Answer 1:

你不需要的false第二个参数,下面的工作:

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

需要注意的是第二个参数可以是一个functionstring 。 如果它是一个string由属性名下划线组。

从文档摘自:

分割一个集合为集合,通过运行通过迭代的每个值的结果进行分组。 如果迭代器是一个字符串,而不是一个功能,通过组通过对每个值的迭代器命名的属性。

这里有一个工作的例子 。



Answer 2:

我从来没有使用下划线的js,但岂不是按他们的文档

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

事实上,我相信,因为它指出这个IR更正确,如果迭代器是一个字符串,在与字符串名称的对象的属性,而不是IT部门。

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

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

var redCars = groupedCars["red"];

要使用过滤器,而不是

看起来通过列表中的每个值,返回该通过一个道理试验(迭代)的所有值的数组。 代表原生过滤器的方法,如果它存在。

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


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


文章来源: Using underscore groupby to group an array of cars by their colour