📜  下划线.js | groupBy() 与示例(1)

📅  最后修改于: 2023-12-03 14:48:48.734000             🧑  作者: Mango

下划线.js | groupBy() 与示例

下划线.js是一个非常流行的JavaScript库,它简化了很多JavaScript代码的书写。其中一个常用的方法是groupBy(),它可以将一个数组按照某个属性进行分组。这个方法非常强大,可以用来解决很多实际问题。

语法

下面是groupBy()的语法:

_.groupBy(list, iteratee, [context])
  • 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},
]

// 请补充你的代码
整理好的思路

我们需要做以下几件事情:

  1. 找出所有姓刘的人。
  2. 根据年龄分为两个组。
  3. 返回分组后的结果。
解决方案

下面是一个可能的解决方案:

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()方法非常强大,并且可以用于很多不同的场景。如果你经常处理数据,它是一个值得掌握的方法。