用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 相关文章推荐
一次失败的jQuery优化尝试小结
Feb 06 Javascript
5个书写JavaScript代码的坏习惯,看看你中枪了没?
Nov 06 Javascript
AngularJS内置指令
Feb 04 Javascript
javascript实现鼠标拖动改变层大小的方法
Apr 30 Javascript
Jquery on方法绑定事件后执行多次的解决方法
Jun 02 Javascript
全面了解JavaScirpt 的垃圾(garbage collection)回收机制
Jul 11 Javascript
JS结合bootstrap实现基本的增删改查功能
Jul 22 Javascript
巧用数组制作图片切换js代码
Nov 29 Javascript
jQuery延迟执行的实现方法
Dec 21 Javascript
用jQuery旋转插件jqueryrotate制作转盘抽奖
Feb 10 Javascript
如何用Node写页面爬虫的工具集
Oct 26 Javascript
jquery操作checkbox的常用方法总结【附测试源码下载】
Jun 10 jQuery
关于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
实现dedecms全站URL静态化改造的代码
2007/03/29 PHP
php str_pad() 将字符串填充成指定长度的字符串
2010/02/23 PHP
PHPMailer的主要功能特点和简单使用说明
2014/02/17 PHP
PHP封装分页函数实现文本分页和数字分页
2014/10/23 PHP
在Debian系统下配置LNMP的教程
2015/07/09 PHP
PHP设计模式之原型设计模式原理与用法分析
2018/04/25 PHP
PHP队列场景以及实现代码实例详解
2021/02/26 PHP
基于jquery的跨域调用文件
2010/11/19 Javascript
javascript模拟select,jselect的方法实现
2012/11/08 Javascript
js查找某元素中的所有图片地址的方法
2014/01/16 Javascript
Javascript中的delete操作符详细介绍
2014/06/06 Javascript
谈谈JavaScript中浏览器兼容问题的写法小议
2016/12/17 Javascript
bootstrap treeview 扩展addNode方法动态添加子节点的方法
2017/11/21 Javascript
Angularjs Promise实例详解
2018/03/15 Javascript
jQuery实现参数自定义的文字跑马灯效果
2018/08/15 jQuery
深入浅析nuxt.js基于ssh的vue通用框架
2019/05/21 Javascript
详解JavaScript 高阶函数
2020/09/14 Javascript
python with statement 进行文件操作指南
2014/08/22 Python
python 添加用户设置密码并发邮件给root用户
2016/07/25 Python
Python Xml文件添加字节属性的方法
2018/03/31 Python
Python实现定时自动关闭的tkinter窗口方法
2019/02/16 Python
Python开启线程,在函数中开线程的实例
2019/02/22 Python
python 已知三条边求三角形的角度案例
2020/04/12 Python
Python通过递归函数输出嵌套列表元素
2020/10/15 Python
iframe跨域的几种常用方法
2019/11/11 HTML / CSS
生产车间主任的个人自我鉴定
2013/10/25 职场文书
大学生暑期实践感言
2014/02/26 职场文书
班级寄语大全
2014/04/10 职场文书
大学班级文化建设方案
2014/05/06 职场文书
材料物理专业求职信
2014/09/01 职场文书
2015年教师节演讲稿范文
2015/03/19 职场文书
谢师宴家长答谢词
2015/09/30 职场文书
25句企业管理语录:助你迅速打开思路,句句经典!
2020/01/14 职场文书
MySQL 慢查询日志深入理解
2021/04/22 MySQL
ElementUI实现el-form表单重置功能按钮
2021/07/21 Javascript
一篇文章带你了解Python和Java的正则表达式对比
2021/09/15 Python