用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 相关文章推荐
用js实现计算代码行数的简单方法附代码
Aug 13 Javascript
某人初学javascript的时候写的学习笔记
Dec 30 Javascript
E3 tree 1.6在Firefox下显示问题的修复方法
Jan 30 Javascript
jquery 定位input元素的几种方法小结
Jul 28 Javascript
jquery操作checkbox实现全选和取消全选
May 02 Javascript
extjs 如何给column 加上提示
Jul 29 Javascript
jQuery事件用法实例汇总
Aug 29 Javascript
举例讲解AngularJS中的模块
Jun 17 Javascript
jQuery如何使用自动触发事件trigger
Nov 29 Javascript
jquery+css3实现会动的小圆圈效果
Jan 27 Javascript
基于javascript实现数字英文验证码
Jan 25 Javascript
基于PHP pthreads实现多线程代码实例
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中用PDO查询Mysql来避免SQL注入风险的方法
2013/04/25 PHP
php判断linux下程序问题实例
2015/07/09 PHP
Javascript表达式中连续的 && 和 || 之赋值区别
2010/10/17 Javascript
jQuery 滑动方法slideDown向下滑动元素
2014/01/16 Javascript
js中创建对象的几种方式示例介绍
2014/01/26 Javascript
原生javascript实现Tab选项卡切换功能
2015/01/12 Javascript
jQuery源码分析之Callbacks详解
2015/03/13 Javascript
JavaScript实现MIPS乘法模拟的方法
2015/04/17 Javascript
介绍一个简单的JavaScript类框架
2015/06/24 Javascript
JQuery中Ajax()的data参数类型实例分析
2015/12/15 Javascript
jQuery实现点击任意位置弹出层外关闭弹出层效果
2016/10/19 Javascript
bootstrap警告框示例代码分享
2017/05/17 Javascript
详细讲解vue2+vuex+axios
2017/05/27 Javascript
使用ef6创建oracle数据库的实体模型遇到的问题及解决方案
2017/11/09 Javascript
微信小程序实现日历功能
2018/11/27 Javascript
微信小程序实现消息框弹出动画
2020/04/18 Javascript
p5.js实现故宫橘猫赏秋图动画
2019/10/23 Javascript
python和shell实现的校验IP地址合法性脚本分享
2014/10/23 Python
python清除字符串里非数字字符的方法
2015/07/02 Python
python实现查找两个字符串中相同字符并输出的方法
2015/07/11 Python
python解决Fedora解压zip时中文乱码的方法
2016/09/18 Python
Python装饰器模式定义与用法分析
2018/08/06 Python
Python实现Event回调机制的方法
2019/02/13 Python
python tkinter库实现气泡屏保和锁屏
2019/07/29 Python
CSS书写规范、顺序和命名规则
2014/03/06 HTML / CSS
HTML5适合的情人节礼物有纪念日期功能
2021/01/25 HTML / CSS
viagogo意大利票务平台:演唱会、体育比赛、戏剧门票
2018/01/26 全球购物
毕业生求职简历的自我评价
2013/10/07 职场文书
护士岗位职责
2014/02/16 职场文书
毕业生就业意向书
2014/04/01 职场文书
社区党员公开承诺书
2014/08/30 职场文书
法学专业大学生实习自我鉴定
2014/10/05 职场文书
辩护词格式
2015/05/22 职场文书
创业计划书之青年旅馆
2019/09/23 职场文书
Pandas实现DataFrame的简单运算、统计与排序
2022/03/31 Python
win10清理dns缓存
2022/04/19 数码科技