用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
打造个性化的功能强大的Jquery虚拟键盘(VirtualKeyboard)
Oct 11 Javascript
简单分析javascript面向对象与原型
May 21 Javascript
js制作带有遮罩弹出层实现登录注册表单特效代码分享
Sep 05 Javascript
深入理解js中this的用法
May 28 Javascript
利用JS实现数字增长
Jul 28 Javascript
jQuery简单实现列表隐藏和显示效果示例
Sep 12 Javascript
使用Vue.js创建一个时间跟踪的单页应用
Nov 28 Javascript
bootstrap选项卡使用方法解析
Jan 11 Javascript
vue-cli脚手架的安装教程图解
Sep 02 Javascript
如何正确理解vue中的key详解
Nov 02 Javascript
使用 Opentype.js 生成字体子集的实例代码详解
May 25 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
杏林同学录(四)
2006/10/09 PHP
织梦模板标记简介
2007/03/11 PHP
php判断并删除空目录及空子目录的方法
2015/02/11 PHP
PHP连接操作access数据库实例
2015/03/30 PHP
PHP限制HTML内容中图片必须是本站的方法
2015/06/16 PHP
用PHP将Unicode 转化为UTF-8的实现方法(推荐)
2017/02/08 PHP
利用js对象弹出一个层
2008/03/26 Javascript
根据鼠标的位置动态的控制层的位置
2009/11/24 Javascript
JavaScript Array Flatten 与递归使用介绍
2011/10/30 Javascript
js判断是否为数组的函数: isArray()
2011/10/30 Javascript
jquery实现微博文字输入框 输入时显示输入字数 效果实现
2013/07/12 Javascript
通过onmouseover选项卡实现img图片的变化
2014/02/12 Javascript
js实现的GridView即表头固定表体有滚动条且可滚动
2014/02/19 Javascript
使用jquery.upload.js实现异步上传示例代码
2014/07/29 Javascript
jQuery+easyui中的combobox实现下拉框特效
2015/02/27 Javascript
JS实现随机乱撞彩色圆球特效的方法
2015/05/05 Javascript
jQuery ajax应用总结
2016/06/02 Javascript
JS针对Array的各种操作汇总
2016/11/29 Javascript
Vue 组件间的样式冲突污染
2017/08/31 Javascript
JS与HTML结合实现流程进度展示条思路详解
2017/09/03 Javascript
详解用webpack的CommonsChunkPlugin提取公共代码的3种方式
2017/11/09 Javascript
vue-cli脚手架config目录下index.js配置文件的方法
2018/03/13 Javascript
微信小程序自定义多选事件的实现代码
2018/05/17 Javascript
Nodejs实现用户注册功能
2019/04/14 NodeJs
JavaScript canvas仿代码流瀑布
2020/02/10 Javascript
javascript代码实现简易计算器
2021/01/25 Javascript
Python中用于去除空格的三个函数的使用小结
2015/04/07 Python
python复制文件的方法实例详解
2015/05/22 Python
Python中使用Queue和Condition进行线程同步的方法
2016/01/19 Python
Python文件和流(实例讲解)
2017/09/12 Python
python实现决策树、随机森林的简单原理
2018/03/26 Python
Python键盘输入转换为列表的实例
2018/06/23 Python
详解Django配置优化方法
2019/11/18 Python
Python包资源下载路径报404解决方案
2020/11/05 Python
罗技英国官方网站:Logitech UK
2020/11/03 全球购物
小学班主任工作总结2015
2015/04/07 职场文书