你掌握几种数组对象的分组方法

66 阅读1分钟

数组对象分组这是很常见遇到的一个问题,那么你掌握几种常见的对象分租方法

 // 高阶函数->缓存函数
        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);