当前位置: 首页 > news >正文

js实现链式调用,查询和处理数据

实现一个 query 方法,实现对数据的链式查询和处理
要求如下
query 传入参数为原始数据(数组格式,每个元素都是对象)
通过进行链式调用对数据执行操作,支持的方法有where(predicate): 根据参数的条件进行筛选,参数与 [].filter 的参数类似
orderBy(key, desc): 根据 key 的值进行排列,默认升序排列,当第二个参数为 true 时降序排列
groupBy(key): 根据 key 的值对数据元素进行分组,合并为二维数组
execute(): 执行所有处理并返回最终结果
执行 execute 方法时才真正执行操作并返回结果

        const data = [{ name: 'foo', age: 16, city: 'shanghai' },{ name: 'bar', age: 24, city: 'hangzhou' },{ name: 'fiz', age: 22, city: 'shanghai' },{ name: 'baz', age: 19, city: 'hangzhou' }];query(data).where(item => item.age > 18).orderBy('age').groupBy('city').execute();// 结果返回[[{ name: 'baz', age: 19, city: 'hangzhou' },{ name: 'bar', age: 24, city: 'hangzhou' },],[{ name: 'fiz', age: 22, city: 'shanghai' },]]function query(data) {const _data = datalet dealing_data = nullconst funs = {where,orderBy,groupBy,execute}function where(cb) {dealing_data = _data.filter(element => cb(element));return funs}function orderBy(key, desc) {const deal_data = dealing_data ?? _datadeal_data.sort((a, b) => !desc ? a[key] - b[key] : b[key] - a[key])return funs}function groupBy(key) {const deal_data = dealing_data ?? _dataconst map = {}deal_data.forEach(element => {if (map[element[key]]) {map[element[key]].push(element)} else {map[element[key]] = [element]}});dealing_data = Object.values(map).reduce((pre, cur) => {pre.push(cur)return pre}, [])return funs}function execute() {const deal_data = dealing_data ?? _dataconsole.log('最终结果', deal_data)return deal_data}return funs}
http://www.lryc.cn/news/186209.html

相关文章:

  • 阿里云 腾讯云 配置二级域名并解析指向非80端口操作指南
  • 菜单子节点的写法
  • 系统架构设计:9 论软件系统架构评估及其应用
  • javaee SpringMVC中json的使用
  • 【系统架构】软件架构的演化和维护
  • 一盏茶的功夫帮你彻底搞懂JavaScript异步编程从回调地狱到async/await
  • 前后端分离计算机毕设项目之基于SpringBoot的无人智慧超市管理系统的设计与实现《内含源码+文档+部署教程》
  • 从0开始python学习-31.selenium 文本输入框、下拉选择框、文件上传、时间插件选择元素定位
  • MyCat-web安装文档:安装Zookeeper、安装Mycat-web
  • Ajax跨域访问,访问成功但一直走error不走success的的问题解决
  • 水星 Mercury MIPC251C-4 网络摄像头 ONVIF 与 PTZ 云台控制
  • Reactor 模式网络服务器【I/O多路复用】(C++实现)
  • 2019年[海淀区赛 第2题] 阶乘
  • CMM—软件企业走向世界的通行证
  • 基于FPGA的图像形态学腐蚀算法实现,包括tb测试文件和MATLAB辅助验证
  • 华为云云耀云服务器L实例评测|RabbitMQ的Docker版本安装 + 延迟插件安装 QQ邮箱和阿里云短信验证码的主题模式发送
  • 解决Linux安装AppImage文件chrome-sandbox出错问题
  • Axios、SASS学习笔记
  • 开发工作中常用到的免费API分享
  • 外汇天眼:三大方法提高容错率——成功投资者的秘密策略!
  • 设计模式-状态模式
  • 支持多种格式照片处理软件Lightroom Classic 2022 mac中文功能特点
  • UML简介
  • 【PostgreSQL内核学习(十七)—— (AutoAnalyze)】
  • C++中指向成员的指针运算符(.* 和 ->*)用法说明
  • ASUS华硕ZenBook灵耀X逍遥UXF3000E_UX363EA原装出厂预装Win11系统工厂模式安装包
  • 【数据结构】栈和队列-- OJ
  • 访问Apache Tomcat的管理页面
  • 企业组织内如何避免山头文化?
  • 【c#】线程Monitor.Wait和Monitor.Pulse使用