用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 相关文章推荐
Javascript 浮点运算的问题分析与解决方法
Aug 27 Javascript
浅析基于WEB前端页面的页面内容搜索的实现思路
Jun 10 Javascript
js动态添加onclick事件可传参数与不传参数
Jul 29 Javascript
jQuery中:last选择器用法实例
Dec 30 Javascript
基于Jquery实现表单验证
Jul 20 Javascript
JavaScript如何获取数组最大值和最小值
Nov 18 Javascript
bootstrap网格系统使用方法解析
Jan 13 Javascript
js实现消息滚动效果
Jan 18 Javascript
浅谈vue-cli加载不到dev-server.js的解决办法
Nov 24 Javascript
vue使用v-if v-show页面闪烁,div闪现的解决方法
Oct 12 Javascript
mpvue微信小程序多列选择器用法之省份城市选择的实现
Mar 07 Javascript
基于Electron实现桌面应用开发代码实例
Jul 07 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生成文件
2007/01/15 PHP
初次接触php抽象工厂模式(Elgg)
2010/03/21 PHP
用PHP实现读取和编写XML DOM代码
2010/04/07 PHP
php处理静态页面:页面设置缓存时间实例
2017/06/22 PHP
js面向对象设计用{}好还是function(){}好(构造函数)
2011/10/23 Javascript
JavaScript实现GriwView单列全选(自写代码)
2013/05/13 Javascript
jQuery 借助插件Lavalamp实现导航条动态美化效果
2013/09/27 Javascript
javascript中怎么做对象的类型判断
2013/11/11 Javascript
深入理解JavaScript系列(18):面向对象编程之ECMAScript实现
2015/03/05 Javascript
JQuery鼠标移到小图显示大图效果的方法
2015/06/10 Javascript
jQuery 判断图片是否加载完成方法汇总
2015/08/10 Javascript
JavaScript如何实现在文本框(密码框)输入提示语
2015/12/25 Javascript
基于JavaScript实现div层跟随滚动条滑动
2016/01/12 Javascript
JQuery实现网页右侧随动广告特效
2016/01/17 Javascript
JavaScript实现复制文章自动添加版权
2016/08/02 Javascript
JavaScript队列、优先队列与循环队列
2016/11/14 Javascript
webpack2.0配置postcss-loader的方法
2017/08/17 Javascript
echarts鼠标覆盖高亮显示节点及关系名称详解
2018/03/17 Javascript
[01:11]回顾历届DOTA2国际邀请赛中国区预选赛
2017/06/26 DOTA
Python设计模式编程中Adapter适配器模式的使用实例
2016/03/02 Python
Python Subprocess模块原理及实例
2019/08/26 Python
广告学专业应届生求职信
2013/10/01 职场文书
公司财务工作总结的自我评价
2013/11/23 职场文书
客房主管岗位职责
2013/12/09 职场文书
奥巴马连任演讲稿
2014/05/15 职场文书
世博会口号
2014/06/20 职场文书
医院标语大全
2014/06/23 职场文书
升学宴演讲稿
2014/09/01 职场文书
小区门卫的岗位职责
2014/09/26 职场文书
应届毕业生自荐信
2015/03/04 职场文书
2015中秋节慰问信范文
2015/03/23 职场文书
文明礼仪主题班会
2015/08/13 职场文书
交通安全宣传标语(100条)
2019/08/22 职场文书
Go语言实现Base64、Base58编码与解码
2021/07/26 Golang
MySQL sql模式设置引起的问题
2022/05/15 MySQL
使用Cargo工具高效创建Rust项目
2022/08/14 Javascript