groupBy实现数据分组
lodash中的groupBy
方法非常好用,它可以帮你快速地按照特定的方式将数据进行分组。
对于数据分组,这样的例子也不少,比如一组账单数据,我需要按天查看,按周查看,按月查看等等,这时,就可以使用groupBy
将它们按照时间来分成不同的组。
那么,如果要自己的来实现一个groupBy
方法,该如何实现呢?
stackoverflow上某位大神实现了一个简洁而有效的方法,代码如下。
function groupBy(array, fn) {
let groups = {}
array.forEach(o => {
let group = JSON.stringify(fn(o))
groups[group] = groups[group] || []
groups[group].push(o)
})
return Object.keys(groups).map(group => groups[group])
}
测试一下
let data = [
{ name: 'Gene', team: 'alpha' },
{ name: 'George', team: 'beta' },
{ name: 'Steve', team: 'gamma' },
{ name: 'Paula', team: 'beta' },
{ name: 'Scruath', team: 'gamma' }
]
let grouped = groupBy(data, item => item.team)
console.log(grouped)
可以看到输出
[ [ { name: 'Gene', team: 'alpha' } ],
[ { name: 'George', team: 'beta' },
{ name: 'Paula', team: 'beta' } ],
[ { name: 'Steve', team: 'gamma' },
{ name: 'Scruath', team: 'gamma' } ] ]
看一下他的实现核心方式是将要groupBy
的字段的值拿到当做键,使用该键在groups
对象中添加一个数组对象,不存在就创建新数组,已存在,则添加该对象到数组,这样就起到了分组的效果。
可以说是简洁明了,当然,这只是简单的demo,具体的实现,还是要结合具体的场景来进行灵活处理,不过核心思路都是一致的。
如果您觉得本文对您有用,欢迎捐赠或留言~
- 本博客所有文章除特别声明外,均可转载和分享,转载请注明出处!
- 本文地址:https://www.leevii.com/?p=1417