📅  最后修改于: 2023-12-03 14:48:48.734000             🧑  作者: Mango
下划线.js是一个非常流行的JavaScript库,它简化了很多JavaScript代码的书写。其中一个常用的方法是groupBy(),它可以将一个数组按照某个属性进行分组。这个方法非常强大,可以用来解决很多实际问题。
下面是groupBy()的语法:
_.groupBy(list, iteratee, [context])
下面是一个使用groupBy()方法的示例,我们将一个学生列表按照年龄进行分组:
var students = [
{name: 'Jack', age: 20},
{name: 'Tom', age: 20},
{name: 'Michael', age: 18},
{name: 'John', age: 19},
{name: 'Andy', age: 18},
];
var result = _.groupBy(students, 'age');
console.log(result);
输出结果如下:
{
18: [
{name: 'Michael', age: 18},
{name: 'Andy', age: 18},
],
19: [
{name: 'John', age: 19},
],
20: [
{name: 'Jack', age: 20},
{name: 'Tom', age: 20},
]
}
这里,我们将年龄相同的学生分为一组,并且返回了一个新的对象。这个对象具有每个年龄值作为键,值是属于该年龄的学生数组。
下面是一个问题,你可以用groupBy()方法解决它:
假设你有一个数组,里面有很多人的名字。你要从这个数组中找出所有姓刘的人,并将他们分为两个组:大于30岁和小于等于30岁。
var people = [
{name: '刘德华', age: 30},
{name: '李刘', age: 40},
{name: '陈刘芳', age: 25},
{name: '刘晓庆', age: 50},
{name: '刘备', age: 35},
{name: '刘益谦', age: 20},
]
// 请补充你的代码
我们需要做以下几件事情:
下面是一个可能的解决方案:
var result = _.chain(people)
.filter(function(person) {
return person.name.indexOf('刘') === 0;
})
.groupBy(function(person) {
return person.age > 30 ? '大于30岁' : '小于等于30岁';
})
.value();
console.log(result);
输出结果如下:
{
"大于30岁": [
{"name":"李刘","age":40},
{"name":"刘晓庆","age":50},
{"name":"刘备","age":35}
],
"小于等于30岁": [
{"name":"刘德华","age":30},
{"name":"陈刘芳","age":25},
{"name":"刘益谦","age":20}
]
}
通过这个例子,我们可以看出groupBy()方法非常强大,并且可以用于很多不同的场景。如果你经常处理数据,它是一个值得掌握的方法。