用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 相关文章推荐
代码生成器 document.write()
Apr 15 Javascript
javascript 函数参数限制说明
Nov 19 Javascript
Jquery图片延迟加载插件jquery.lazyload.js的使用方法
May 21 Javascript
JavaScript实现为指定对象添加多个事件处理程序的方法
Apr 17 Javascript
JQuery自适应窗口大小导航菜单附源码下载
Sep 01 Javascript
JS实现兼容性较好的随屏滚动效果
Nov 09 Javascript
jQuery实现简单的tab标签页效果
Sep 12 Javascript
基于vue的下拉刷新指令和滚动刷新指令
Dec 23 Javascript
JavaScript实现翻页功能(附效果图)
Feb 16 Javascript
JavaScript实现动态添加Form表单元素的方法示例
Aug 14 Javascript
Express系列之multer上传的使用
Oct 27 Javascript
Promise扫盲贴
Jun 24 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
PHP随机数生成代码与使用实例分析
2011/04/08 PHP
php实现模拟登陆方正教务系统抓取课表
2015/05/19 PHP
php生成唯一数字id的方法汇总
2015/11/18 PHP
PHP使用curl函数发送Post请求的注意事项
2016/11/26 PHP
php中Swoole的热更新实现代码实例
2021/03/04 PHP
基于jquery的给文章加入关键字链接
2010/10/26 Javascript
javascript 学习笔记(一)DOM基本操作
2011/04/08 Javascript
关于JavaScript中原型继承中的一点思考
2012/07/25 Javascript
JS实现仿饿了么在浏览器标签页失去焦点时网页Title改变
2017/06/01 Javascript
基于webpack 实用配置方法总结
2017/09/28 Javascript
Vue中之nextTick函数源码分析详解
2017/10/17 Javascript
利用Javascript实现一套自定义事件机制
2017/12/14 Javascript
使用jquery Ajax实现上传附件功能
2018/10/23 jQuery
关于vue表单提交防双/多击的例子
2019/10/31 Javascript
element-ui 文件上传修改文件名的方法示例
2019/11/05 Javascript
微信小程序 this.triggerEvent()的具体使用
2019/12/10 Javascript
django简单的前后端分离的数据传输实例 axios
2020/05/18 Javascript
JS array数组检测方式解析
2020/05/19 Javascript
[34:27]DOTA2上海特级锦标赛B组败者赛 VG VS Spirit第一局
2016/02/26 DOTA
Python使用arrow库优雅地处理时间数据详解
2017/10/10 Python
python pandas实现excel转为html格式的方法
2018/10/23 Python
Python设计模式之策略模式实例详解
2019/01/21 Python
pyqt5利用pyqtDesigner实现登录界面
2019/03/28 Python
python实现输入任意一个大写字母生成金字塔的示例
2019/10/27 Python
python爬虫实现获取下一页代码
2020/03/13 Python
3分钟看懂Python后端必须知道的Django的信号机制
2020/07/26 Python
墨西哥巴士车票在线购买:ClickBus
2018/03/27 全球购物
什么是GWT的Entry Point
2013/08/16 面试题
请说出以下代码输出什么
2013/08/30 面试题
应聘收银员个人的求职信
2013/11/30 职场文书
晚宴邀请函范文
2014/01/15 职场文书
致长跑运动员加油稿
2014/02/20 职场文书
2014年卫生监督工作总结
2014/12/09 职场文书
食堂卫生管理制度
2015/08/04 职场文书
导游词之西江千户苗寨
2019/12/24 职场文书
JavaScript如何利用Promise控制并发请求个数
2021/05/14 Javascript