1、分组得到一个二维数组
/**
* 得到二维数组
* @param {*} list
* @param {*} fn
* @returns
*/
function groupBy(list, fn) {
const map = {}
list.forEach(item => {
const key = JSON.stringify(fn(item))
map[key] = map[key] || []
map[key].push(item)
})
return Object.keys(map).map(key => map[key])
}
const list = [
{ "name": "alex", "age": 15, "high": 10, "phone": 1358226000000 },
{ "name": "jan", "age": 16, "high": 92, "phone": 1358226000000 },
{ "name": "jan", "age": 17, "high": 45, "phone": 1358226000000 },
{ "name": "alex", "age": 18, "high": 87, "phone": 1358226000000 },
{ "name": "jan", "age": 15, "high": 10, "phone": 1358226060000 },
{ "name": "alex", "age": 16, "high": 87, "phone": 1358226060000 },
{ "name": "alex", "age": 17, "high": 45, "phone": 1358226060000 },
{ "name": "jan", "age": 18, "high": 92, "phone": 1358226060000 }
]
console.log(groupBy(list, item => item.name))
输出结果
2、分组得到一个对象
/**
* 得到对象
* @param {*} list
* @param {*} fn
* @returns
*/
function groupBy(list, fn) {
const map = {}
list.forEach(item => {
const key = fn(item)
map[key] = map[key] || []
map[key].push(item)
})
return map
}
const list = [
{ "name": "alex", "age": 15, "high": 10, "phone": 1358226000000 },
{ "name": "jan", "age": 16, "high": 92, "phone": 1358226000000 },
{ "name": "jan", "age": 17, "high": 45, "phone": 1358226000000 },
{ "name": "alex", "age": 18, "high": 87, "phone": 1358226000000 },
{ "name": "jan", "age": 15, "high": 10, "phone": 1358226060000 },
{ "name": "alex", "age": 16, "high": 87, "phone": 1358226060000 },
{ "name": "alex", "age": 17, "high": 45, "phone": 1358226060000 },
{ "name": "jan", "age": 18, "high": 92, "phone": 1358226060000 }
]
console.log(groupBy(list, item => item.name))
输出结果
3、使用Lodash工具函数
const _ = require('lodash')
const list = [
{ "name": "alex", "age": 15, "high": 10, "phone": 1358226000000 },
{ "name": "jan", "age": 16, "high": 92, "phone": 1358226000000 },
{ "name": "jan", "age": 17, "high": 45, "phone": 1358226000000 },
{ "name": "alex", "age": 18, "high": 87, "phone": 1358226000000 },
{ "name": "jan", "age": 15, "high": 10, "phone": 1358226060000 },
{ "name": "alex", "age": 16, "high": 87, "phone": 1358226060000 },
{ "name": "alex", "age": 17, "high": 45, "phone": 1358226060000 },
{ "name": "jan", "age": 18, "high": 92, "phone": 1358226060000 }
]
// 比较推荐这种写法
const res = _.groupBy(list, item => item.name)
console.log(res)
再来看下输出结果