我有一个JSON输入,它的结构如下:
const logicJson2 = [
[
{ "key": true },
"OR",
{ "key": true }
],
"AND",
[
{ "key": false},
"OR",
{ "key": true }
]
]
这是一个例子,输入可能更复杂,例如:
const logicJson = [
[
[
{ "key": false },
"AND",
{ "key": true }
],
"OR",
{ "key": true }
],
"AND",
[
{ "key": false},
"OR",
{ "key": true }
]
]
我想到了用递归的方法来开始求解它。所以,如果输入项是一个数组,我就把它递归地传递给函数。这是我开始工作的一个非常简单的例子:
const store = new Map();
function analyze(term){
if(Array.isArray(term[0])){
store.set("first",{first: analyze(term[0])});
}else{
store.set("first",{first: term[0].key});
}
if(Array.isArray(term[2])){
store.set("second",{second: analyze(term[2])});
}else{
store.set("second",{second: term[2].key});
}
if(store['first'] && store['second']){
switch(term[1]){
case 'AND':
return term[0].key && term[2].key
break;
case 'OR':
return term[0].key || term[2].key
break;
}
}
}
我被困在那里,我应该如何处理这个问题,什么是最有效的方法?。应该从最后存储结果,并开始解决每一项,直到我得到最终结果?,这必须是真或假取决于逻辑。有一个例子或模式在那里我应该参考?。非常感谢
1条答案
按热度按时间jv4diomz1#
因为在同一个函数执行过程中需要存储值,所以不需要使用
Map
,所以可以只使用局部变量来存储递归调用的返回值。其次,可以通过检查参数本身的类型来简化,而不是检查索引0和索引2处的条目。这样可以避免代码重复(对于左操作数和右操作数)。以下是具体的操作方法: