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

Jon*_*lls 15 javascript iterator underscore.js

我有一系列汽车.

car = {
    make: "nissan",
    model: "sunny",
    colour: "red"
};
Run Code Online (Sandbox Code Playgroud)

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

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

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

它们每次都返回数组中的所有内容.

jab*_*lab 35

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

var redCars = _.groupBy(cars, 'colour');
Run Code Online (Sandbox Code Playgroud)

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

取自文档:

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

这是一个有效的例子.


Jon*_*lor 10

我从来没有使用下划线js,但它不会像他们的文档那样

var groupedCars = _.groupBy(cars, function(car) { return car.make; });
Run Code Online (Sandbox Code Playgroud)

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

var groupedCars = _.groupBy(cars, "make");
Run Code Online (Sandbox Code Playgroud)

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

var redCars = groupedCars["red"];
Run Code Online (Sandbox Code Playgroud)

改为使用过滤器

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

var redCars = _.filter(cars, function(car) { return car.colour == "red" });
Run Code Online (Sandbox Code Playgroud)