JavaScript分組是一個(gè)非常常見的操作,可以用于對(duì)數(shù)據(jù)進(jìn)行分類、過濾、排序等。下面我們就來(lái)詳細(xì)講解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' }, ];``` 我們假設(shè)我們有一個(gè)人員列表,如上所示。我們現(xiàn)在要根據(jù)年齡段對(duì)列表進(jìn)行分組,并計(jì)算各組人數(shù)和平均年齡。 ## 根據(jù)年齡段分組 我們可以使用reduce函數(shù),對(duì)年齡進(jìn)行分組。 ```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函數(shù)將每個(gè)人的年齡向下取整,然后將同一個(gè)年齡組的人員放在一起。最后返回一個(gè)以年齡段為key的對(duì)象。 輸出結(jié)果如下: ```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' }, ], }``` 可以看到,我們已經(jīng)將人員按照年齡段分好了組,接下來(lái)我們需要統(tǒng)計(jì)每個(gè)組的人數(shù)和平均年齡。 ## 統(tǒng)計(jì)組內(nèi)人數(shù)和平均年齡 為了計(jì)算組內(nèi)人數(shù)和平均年齡,我們需要循環(huán)遍歷每個(gè)組,統(tǒng)計(jì)人數(shù)和年齡總和。 ```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循環(huán)遍歷每個(gè)年齡段,然后對(duì)每個(gè)年齡段內(nèi)的人員進(jìn)行統(tǒng)計(jì)。最終輸出每個(gè)年齡段的人數(shù)和平均年齡。 輸出結(jié)果如下: ```html
{ '20': { count: 3, avgAge: 20.333333333333332 }, '10': { count: 1, avgAge: 18 }, '21': { count: 1, avgAge: 21 }, }``` 綜上所述,JavaScript分組操作是非常實(shí)用且常見的操作。無(wú)論是對(duì)數(shù)據(jù)進(jìn)行分類、過濾、排序等,分組都是一個(gè)很好的工具。希望本文對(duì)您有所幫助。