数组对象分组这是很常见遇到的一个问题,那么你掌握几种常见的对象分租方法
// 高阶函数->缓存函数
function memorize(func,resolver) {
const memorized = function(...args){
// 设置缓存key值
const key = resolver ? resolver.apply(this,args) : args[0];
// 判读是否已经存入进去
if(memorized.cache.has(key)){
return memorized.cache.get(key);
}
// 执行该函数
let result = func.apply(this,args);
memorized.cache.set(key,result);
}
memorized.cache = new WeakMap();
return memorized;
}
const people = [{
name: '张三', age: 23,sex: 'male'
},{
name: '张四', age: 24,sex: 'male'
},{
name: '张五', age: 25,sex: 'male'
},{
name: '张六', age: 26,sex: 'male'
},{
name: '张七', age: 27,sex: 'male'
},{
name: '张八', age: 28,sex: 'male'
},
{
name: '张九', age: 28,sex: 'male'
}]
// 根据年龄来划分第一种写法
const groupByAge_1 = (args,type) =>{
const res = args.reduce((pre,next) =>{
const key = next[type]
if(!pre[key]){
pre[key] = [];
}
pre[key].push(next);
return pre
},{})
return res;
}
// 根据年龄来划分的第二种写法
const groupByAge_2 = (args,type) =>{
const result = {};
for(let item of args){
const key = item[type]
if(!result[key]){
result[key] = [];
}
result[key].push(item);
}
return result;
}
Object.groupBy(people, ({ age }) => age);