是否有编译器或一种简单的方法可以编译和评估在对象上指定的逻辑运算符和操作数。这类似于 mongodb 的$or和$and运算符。例如:
return {
$or: [
foo: [...],
bar: [...]
]
}
当编译器遇到foo它时,它会调用一个相应的函数,并提供相同的值。也是如此bar。然后它将logical OR两个操作的结果。我要处理$and和$or运营商。我会为这样一个简单的例子做简单的检查,但我希望能够嵌套逻辑运算符。一个复杂的例子:
return {
$or: [
{
$and: [
{ foo: [...] },
{ bar: [...] }
]
},
{ baz: [...] },
() => m < n
]
}
和的简化定义foo:barbaz
export const evalFoo = items => {
return items.indexOf("foo") >= 0;
};
export const evalBar = items => {
return items.indexOf("bar") >= 0;
};
export const evalBaz = items => {
return items.indexOf("baz") >= 0;
};
样本数据:
设置 1
m = 4; n = 1; foo: ['foo', 'x']; bar: ['bar', 'y']; baz: ['baz', 'z']
RESULT = true; // because $and results to true.
设置 2
m = 4; n = 1; foo: ['x']; bar: ['y']; baz: ['x']
RESULT = false; // because m > n and $and results to false.
设置 3
m = 1; n = 3; foo: ['x']; bar: ['y']; baz: ['x']
RESULT = true; // because m < n.
设置 4
m = 3; n = 1; foo: ['x']; bar: ['bar']; baz: ['z']
RESULT = true; // because m > n, baz() is false and x and $and is false.