![](/img/trans.png)
[英]Using underscore groupby to group an array of objects by more than one attribute
[英]Using underscore groupby to group an array of cars by their colour
我有一系列汽车。
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]; };
它们每次都返回数组中的所有内容。
您不需要false
第二个参数,以下内容将起作用:
var redCars = _.groupBy(cars, 'colour');
请注意,第二个参数可以是function
或string
。 如果它是由该属性名称组成的string
下划线组。
取自文档:
将集合拆分为集合,按照通过迭代器运行每个值的结果进行分组。 如果迭代器是字符串而不是函数, 则按每个值上的迭代器命名的属性进行分组。
这是一个有效的例子 。
我从来没有使用下划线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" });
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.