编辑代码



class Query{
    constructor(data) {
        this._data=data;
        this._cacheFn=[];
    }
    where(callback){
        const cacheFn=function (data){
            return data.filter(item=>callback(item));
        }
        this._cacheFn.push(cacheFn)
        return this
    }

    sortBy(key){
        const cacheFn = function(data){
            data.sort((a,b)=>a[key]-b[key]);
            return data
        }
        this._cacheFn.push(cacheFn)
        return this;
    }
    groupBy(key){
        const cacheFn=function(data){
            return data.reduce((acc,cur)=>{
                if(!Array.isArray(acc[cur[key]])){
                    acc[cur[key]]=[];
                }
                acc[cur[key]].push(cur);
                return acc
            },{})
        }
        this._cacheFn.push(cacheFn)
        return this;
    }
    execute(){
        let res =this._data;
        while (this._cacheFn.length){
            res=this._cacheFn.shift()(res);
        }
        return res;
    }
}

function query(data){
    return new Query(data);
}

const data =[{id:23,name:"xigua"},{id:56,name:"xiangjiao"},{id:48,name:"lizi"},{id:11,name:"xigua"},{id:9,name:"pingguo"}];

const res=query(data)
    .where(item=>item.id>10)
    .sortBy("id")
    .groupBy("name")
    .execute();

console.log(res)