最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

用JavaScript對JSON進行模式匹配(Part 1-設計)

 更新時間:2010年07月17日 17:31:00   作者:  
在《從 if else 到 switch case 再到抽象》這篇文章里面說到,解決 if else 和 switch case 分支過多的一個方法,就是做一個專用的 dispatcher ,讓它來負責進行篩選與轉(zhuǎn)發(fā)。
至于篩選條件的描述,模式匹配是一種很常見也很好用的方式。在 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"
})

隨手寫下來一堆運算符,看起來實現(xiàn)會很復雜?其實不會有多復雜。在下一篇文章里面,我們會討論如何設計一個運算符接口,然后逐一實現(xiàn)這些運算符。

相關(guān)文章

最新評論

辽中县| 桑植县| 聂荣县| 曲松县| 万源市| 阿克| 彭泽县| 苍梧县| 吕梁市| 淮安市| 英山县| 西昌市| 白沙| 西藏| 祁连县| 金华市| 高要市| 安丘市| 蓝山县| 吉水县| 宝应县| 克东县| 明水县| 隆尧县| 贵阳市| 贵州省| 高清| 大庆市| 九寨沟县| 福清市| 化德县| 保亭| 马山县| 太谷县| 武安市| 封开县| 若羌县| 十堰市| 沙湾县| 乌拉特前旗| 南投县|