用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 版
Mar 24 Javascript
webapp框架AngularUI的demo改造之路
Dec 21 Javascript
jquery实现相册一下滑动两次的方法
Feb 09 Javascript
jquery+javascript编写国籍控件
Feb 12 Javascript
JS从一组数据中找到指定的单条数据的方法
Jun 02 Javascript
需灵活掌握的Bootstrap预定义排版类 你精通吗?
Jun 20 Javascript
Query常用DIV操作获取和设置长度宽度的实现方法
Sep 19 Javascript
[原创]JavaScript语法高亮插件highlight.js用法详解【附highlight.js本站下载】
Nov 01 Javascript
原生JS实现日历组件的示例代码
Sep 22 Javascript
详解让sublime text3支持Vue语法高亮显示的示例
Sep 29 Javascript
Vue.js 中的 v-cloak 指令及使用详解
Nov 19 Javascript
vue中配置scss全局变量的步骤
Dec 28 Vue.js
关于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/12/06 PHP
在Mac OS上自行编译安装Apache服务器和PHP解释器
2015/12/24 PHP
php preg_match的匹配不同国家语言实例
2016/12/29 PHP
thinkPHP5使用Rabc实现权限管理
2019/08/28 PHP
PHPstorm启用自动换行的方法详解(IDE)
2020/09/17 PHP
JS添加删除一组文本框并对输入信息加以验证判断其正确性
2013/04/11 Javascript
jquery遍历筛选数组的几种方法和遍历解析json对象
2013/12/13 Javascript
javascript中interval与setTimeOut的区别示例介绍
2014/03/14 Javascript
jquery实现多行文字图片滚动效果示例代码
2014/10/10 Javascript
JavaScript中自定义事件用法分析
2014/12/23 Javascript
js设置文字颜色的方法示例
2016/12/30 Javascript
vue+vuecli+webpack中使用mockjs模拟后端数据的示例
2017/10/24 Javascript
node.js使用免费的阿里云ip查询获取ip所在地【推荐】
2018/09/03 Javascript
koa socket即时通讯的示例代码
2018/09/07 Javascript
详解小程序云开发数据库
2019/05/20 Javascript
微信小程序入口场景的问题集合与相关解决方法
2019/06/26 Javascript
js实现select下拉框选择
2020/01/11 Javascript
[01:59]游戏“zheng”当时试玩会
2019/08/21 DOTA
python文件比较示例分享
2014/01/10 Python
详解在Python中处理异常的教程
2015/05/24 Python
详解字典树Trie结构及其Python代码实现
2016/06/03 Python
python中函数总结之装饰器闭包详解
2016/06/12 Python
django实现用户登陆功能详解
2017/12/11 Python
python获取当前文件路径以及父文件路径的方法
2019/07/10 Python
python-web根据元素属性进行定位的方法
2019/12/13 Python
Python semaphore evevt生产者消费者模型原理解析
2020/03/18 Python
matplotlib源码解析标题实现(窗口标题,标题,子图标题不同之间的差异)
2021/02/22 Python
CSS3实现跳动的动画效果
2016/09/12 HTML / CSS
跑鞋、网球鞋、网球拍、服装及装备:Holabird Sports
2016/09/19 全球购物
如何将字串String转换成整数int
2015/02/21 面试题
.NET面试题:什么是值类型和引用类型
2016/01/12 面试题
先进个人事迹材料范文
2014/12/30 职场文书
建筑工程材料员岗位职责
2015/04/11 职场文书
2015年小学语文教师工作总结
2015/10/23 职场文书
2019年教师入党申请书
2019/06/27 职场文书
详解RedisTemplate下Redis分布式锁引发的系列问题
2021/04/27 Redis