实现一个链式调用的query方法
提供了一个数组结构的 data,要求实现一个 query 方法,返回一个新的数组,query 方法内部有 过滤、排序、分组
等操作,并且支持链式调用,调用最终的 execute 方法返回结果
你可以按照以下步骤实现这个 query 方法:
- 定义一个数组结构的 data,例如:
const data = [ { id: 1, name: 'Alice', age: 20, gender: 'female' }, { id: 2, name: 'Bob', age: 25, gender: 'male' }, { id: 3, name: 'Charlie', age: 30, gender: 'male' }, { id: 4, name: 'David', age: 35, gender: 'male' }, { id: 5, name: 'Ella', age: 40, gender: 'female' } ];
- 定义一个 Query 类,该类包含一个 results 数组,以及一些操作方法,例如:
class Query { constructor(data) { this.results = data; } filter(callback) { this.results = this.results.filter(callback); return this; } sort(callback) { this.results = this.results.sort(callback); return this; } groupBy(key) { const groups = new Map(); this.results.forEach((item) => { const group = item[key]; if (groups.has(group)) { groups.get(group).push(item); } else { groups.set(group, [item]); } }); this.results = groups; return this; } execute() { return this.results; } }
在 Query 类的构造函数中初始化 results 数组为传入的数据数组 data。
定义 filter 方法,该方法接受一个回调函数作为参数,过滤 results 数组中的元素,并将过滤后的结果存储回 results 数组中,然后返回 this 对象以支持链式调用。
定义 sort 方法,该方法接受一个回调函数作为参数,排序 results 数组中的元素,并将排序后的结果存储回 results 数组中,然后返回 this 对象以支持链式调用。
定义 groupBy 方法,该方法接受一个字符串类型的参数 key,按照 key 对 results 数组中的元素进行分组,并将分组后的结果存储回 results 数组中,然后返回 this 对象以支持链式调用。
定义 execute 方法,该方法返回经过操作后的 results 数组。
使用如下代码调用 query 方法,实现过滤、排序、分组等操作:
const result = new Query(data) .filter((item) => item.age > 25) .sort((a, b) => a.age - b.age) .groupBy('gender') .execute(); console.log(result);
输出结果为:Map(2) {
'female' => [
{ id: 5, name: 'Ella', age: 40, gender: 'female' } ],
'male' => [ { id: 3, name: 'Charlie', age: 30, gender: 'male' },
{ id: 4, name: 'David', age: 35, gender: 'male' }, { id: 2, name: 'Bob', age: 25, gender: 'male' } ]
}
标签:
JS
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?