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

时间:2021-05-18

至于筛选条件的描述,模式匹配是一种很常见也很好用的方式。在 JavaScript 里面,用 JSON 来描述模式又是相当方便的事情,所以我们来做一个 JSON 模式匹配工具吧。

用例设计
作为一个 dispatcher ,我们只需要两个方法: notify 和 capture 。一个最简单的用例是这样的:
复制代码 代码如下:
Dispatcher.capture({
"status": 200,
"command": "message"
}, function(json) { });

Dispatcher.notify({
“status": 200,
"command": "message",
"content": {
"from": "user1",
"to": "user2",
"text": "hello"
}
});

当然,只有局部的全等匹配是不够的,我们还需要一些其他运算符。
复制代码 代码如下:
Dispatcher.capture({
"value1$eq": "hello",
"value2$ne": true,
"value3$lt": 0,
"value4$lte: 1,
"value5$gt": 2,
"value6$gte": 3,
"value7$in": [1, 3, 5, 7, 9],
"value8$nin": [2, 4, 6, 8, 10],
"value9$all": [1, 2, 3, 4, 5],
"value10$ex": true,
"value11$re": /^A.*/,
"value12$ld": function(json) { return true; }
}, 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"
})

随手写下来一堆运算符,看起来实现会很复杂?其实不会有多复杂。在下一篇文章里面,我们会讨论如何设计一个运算符接口,然后逐一实现这些运算符。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章