JavaScript分组是一个非常常见的操作,可以用于对数据进行分类、过滤、排序等。下面我们就来详细讲解JavaScript分组操作。
```html
let list = [ { name: '张三', age: 20, gender: 'male' }, { name: '李四', age: 22, gender: 'male' }, { name: '王五', age: 18, gender: 'female' }, { name: '赵六', age: 19, gender: 'female' }, { name: '钱七', age: 21, gender: 'male' }, ];``` 我们假设我们有一个人员列表,如上所示。我们现在要根据年龄段对列表进行分组,并计算各组人数和平均年龄。 ## 根据年龄段分组 我们可以使用reduce函数,对年龄进行分组。 ```html
let groupByAge = list.reduce((result, item) =>{ const ageGroup = Math.floor(item.age / 10) * 10; result[ageGroup] = result[ageGroup] || []; result[ageGroup].push(item); return result; }, {}); console.log(groupByAge);``` 上述代码中,我们首先使用Math.floor函数将每个人的年龄向下取整,然后将同一个年龄组的人员放在一起。最后返回一个以年龄段为key的对象。 输出结果如下: ```html
{ '20': [ { name: '张三', age: 20, gender: 'male' }, { name: '李四', age: 22, gender: 'male' }, { name: '赵六', age: 19, gender: 'female' }, ], '10': [ { name: '王五', age: 18, gender: 'female' }, ], '21': [ { name: '钱七', age: 21, gender: 'male' }, ], }``` 可以看到,我们已经将人员按照年龄段分好了组,接下来我们需要统计每个组的人数和平均年龄。 ## 统计组内人数和平均年龄 为了计算组内人数和平均年龄,我们需要循环遍历每个组,统计人数和年龄总和。 ```html
let groupSum = {}; for (let ageGroup in groupByAge) { let group = groupByAge[ageGroup]; groupSum[ageGroup] = { count: group.length, avgAge: group.reduce((sum, item) =>sum + item.age, 0) / group.length, }; } console.log(groupSum);``` 上述代码中,我们使用for...in循环遍历每个年龄段,然后对每个年龄段内的人员进行统计。最终输出每个年龄段的人数和平均年龄。 输出结果如下: ```html
{ '20': { count: 3, avgAge: 20.333333333333332 }, '10': { count: 1, avgAge: 18 }, '21': { count: 1, avgAge: 21 }, }``` 综上所述,JavaScript分组操作是非常实用且常见的操作。无论是对数据进行分类、过滤、排序等,分组都是一个很好的工具。希望本文对您有所帮助。