技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> JavaScript --> 用 JavaScript 对 JSON 进行模式匹配 (Part 1 - 设计)

用 JavaScript 对 JSON 进行模式匹配 (Part 1 - 设计)

浏览:4400次  出处信息

    在《从 if else 到 switch case 再到抽象》这篇文章里面说到,解决 if else 和 switch case 分支过多的一个方法,就是做一个专用的 dispatcher ,让它来负责进行筛选与转发。至于筛选条件的描述,模式匹配是一种很常见也很好用的方式。在 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"

     })

    随手写下来一堆运算符,看起来实现

建议继续学习:

  1. JSON和JSONP的区别    (阅读:7691)
  2. XML和JSON    (阅读:6719)
  3. 如何编写一个JSON解析器    (阅读:5425)
  4. 理解JSON:3分钟课程    (阅读:4795)
  5. 前端模板引擎    (阅读:3782)
  6. 用 JavaScript 对 JSON 进行模式匹配 (Part 2 - 实现)    (阅读:3737)
  7. Ajax和WEB服务数据格式:JSON JSONP    (阅读:3528)
  8. [python]定制JSON中的浮点数格式    (阅读:3028)
  9. JSON对象和字符串之间的相互转换    (阅读:2946)
  10. 让Json更懂中文(JSON_UNESCAPED_UNICODE)    (阅读:2825)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1