用JavaScript对JSON进行模式匹配(Part 1-设计)


Posted in Javascript onJuly 17, 2010

至于筛选条件的描述,模式匹配是一种很常见也很好用的方式。在 JavaScript 里面,用 JSON 来描述模式又是相当方便的事情,所以我们来做一个 JSON 模式匹配工具吧。

用例设计
作为一个 dispatcher ,我们只需要两个方法: notify 和 capture 。一个最简单的用例是这样的:

Dispatcher.capture({ 
"status": 200, 
"command": "message" 
}, function(json) { /* display message */ }); Dispatcher.notify({ 
“status": 200, 
"command": "message", 
"content": { 
"from": "user1", 
"to": "user2", 
"text": "hello" 
} 
});

当然,只有局部的全等匹配是不够的,我们还需要一些其他运算符。
Dispatcher.capture({ 
"value1$eq": "hello", /* equal */ 
"value2$ne": true, /* not equal */ 
"value3$lt": 0, /* less than */ 
"value4$lte: 1, /* less than or equal */ 
"value5$gt": 2, /* greater than */ 
"value6$gte": 3, /* greater than or equal */ 
"value7$in": [1, 3, 5, 7, 9], /* in */ 
"value8$nin": [2, 4, 6, 8, 10], /* not in */ 
"value9$all": [1, 2, 3, 4, 5], /* all */ 
"value10$ex": true, /* exists */ 
"value11$re": /^A.*/, /* regular expression */ 
"value12$ld": function(json) { return true; } /* lambda */ 
}, function(json) {}); Dispatcher.notify({ 
"value1": "hello", 
"value2": false, 
"value3": -1, 
"value4": 1, 
"value5": 3, 
"value6": 3, 
"value7": 5, 
"value8": 5, 
"value9": [1, 3, 5, 2, 4], 
"value10": "hello", 
"value11": "A13579", 
"value12": "anything" 
})

随手写下来一堆运算符,看起来实现会很复杂?其实不会有多复杂。在下一篇文章里面,我们会讨论如何设计一个运算符接口,然后逐一实现这些运算符。
Javascript 相关文章推荐
响应鼠标变换表格背景或者颜色的代码
Mar 30 Javascript
js本身的局限性 别让javascript做太多事
Mar 23 Javascript
JSON语法五大要素图文介绍
Dec 04 Javascript
js数组的操作详解
Mar 27 Javascript
jQuery之日期选择器的深入解析
Jun 19 Javascript
jquery对ajax的支持介绍
Dec 10 Javascript
浅析Node.js中使用依赖注入的相关问题及解决方法
Jun 24 Javascript
jquery实现美观的导航菜单鼠标提示特效代码
Sep 06 Javascript
jquery中ajax处理跨域的三大方式
Jan 05 Javascript
Angular.js中数组操作的方法教程
Jul 31 Javascript
vue实现的仿淘宝购物车功能详解
Jan 27 Javascript
使用webpack/gulp构建TypeScript项目的方法示例
Dec 18 Javascript
关于flash遮盖div浮动层的解决方法
Jul 17 #Javascript
JQUERY获取form表单值的代码
Jul 17 #Javascript
jQuery+ajax实现顶一下,踩一下效果
Jul 17 #Javascript
flexigrid 类似ext grid的JS表格代码
Jul 17 #Javascript
基于JQuery的Pager分页器实现代码
Jul 17 #Javascript
基于jQuery的Spin Button自定义文本框数值自增或自减
Jul 17 #Javascript
JS延迟加载(setTimeout) JS最后加载
Jul 15 #Javascript
You might like
JavaScript 监听textarea中按键事件
2009/10/08 Javascript
extjs DataReader、JsonReader、XmlReader的构造方法
2009/11/07 Javascript
jQuery AJAX 调用WebService实现代码
2010/03/24 Javascript
Jquery下attr和removeAttr的使用方法
2010/12/28 Javascript
JQuery实现表格中相同单元格合并示例代码
2013/06/26 Javascript
jquery复选框全选/取消示例
2013/12/30 Javascript
js弹出确认是否删除对话框
2014/03/27 Javascript
详解addEventListener的三个参数之useCapture
2015/03/16 Javascript
javascript实现的网站访问量统计代码
2015/12/20 Javascript
jquery.validate 自定义验证方法及validate相关参数
2016/01/18 Javascript
利用yarn实现一个webpack+react种子
2016/10/25 Javascript
使用原生的javascript来实现轮播图
2017/02/24 Javascript
vue.js实现单选框、复选框和下拉框示例
2017/07/18 Javascript
vue中如何使用ztree
2018/02/06 Javascript
js html实现计算器功能
2018/11/13 Javascript
vue实现分页栏效果
2019/06/28 Javascript
JavaScript 实现HTML DOM增删改查操作的常见方法详解
2020/01/04 Javascript
基于javascript处理二进制图片流过程详解
2020/06/08 Javascript
详解vue 中 scoped 样式作用域的规则
2020/09/14 Javascript
vue+vant 上传图片需要注意的地方
2021/01/03 Vue.js
[00:32]2018DOTA2亚洲邀请赛Secret出场
2018/04/03 DOTA
举例讲解Linux系统下Python调用系统Shell的方法
2015/11/07 Python
python dict.get()和dict['key']的区别详解
2016/06/30 Python
Python内建函数之raw_input()与input()代码解析
2017/10/26 Python
Python列表推导式与生成器表达式用法示例
2018/02/08 Python
Python实现FTP弱口令扫描器的方法示例
2019/01/31 Python
关于Pytorch的MNIST数据集的预处理详解
2020/01/10 Python
网页布局中CSS样式无效的十个重要原因详解
2017/08/10 HTML / CSS
H5调用相机拍照并压缩图片的实例代码
2017/07/20 HTML / CSS
群众路线党课主持词
2014/04/01 职场文书
小学生操行评语
2014/04/22 职场文书
副科级后备干部考察材料
2014/05/15 职场文书
小学教师暑期培训方案
2014/08/28 职场文书
小学班主任经验交流材料
2014/12/16 职场文书
企业安全隐患排查治理制度
2015/08/05 职场文书
详解Go语言运用广度优先搜索走迷宫
2021/06/23 Python