Javascript 递归函数,用于格式化嵌套数组以匹配条件数组
尝试编写此eval函数,该函数接受事例,循环遍历事例,需要检查它是否与条件数组中的条件匹配,并返回true或false。我不确定如何最好地格式化条件数组并在其上运行匹配。条件是嵌套的,有n个级别,因此尝试获取递归函数Javascript 递归函数,用于格式化嵌套数组以匹配条件数组,javascript,arrays,json,object,Javascript,Arrays,Json,Object,尝试编写此eval函数,该函数接受事例,循环遍历事例,需要检查它是否与条件数组中的条件匹配,并返回true或false。我不确定如何最好地格式化条件数组并在其上运行匹配。条件是嵌套的,有n个级别,因此尝试获取递归函数 console.log(cases.forEach(c => eval(formattedCondition, c.item))) const conditions = [ "OR", ["AND",["==","maker","airbus"],["==","name
console.log(cases.forEach(c => eval(formattedCondition, c.item)))
const conditions = [
"OR",
["AND",["==","maker","airbus"],["==","name","A320"]],
["AND",[ "==", "maker","boeing"]],
["OR",["==","name","B767"]]
]
const cases = [
{
"item": {
'maker': 'airbus',
'name':"A320",
}
// should return true for this case
},
{
"item": {
'maker': 'embraer',
'name':"e175",
}
// should return false for this case
},
{
"item": {
'maker': 'boeing',
}
// should return true for this case
},
{
"item": {
'name':"B767",
}
// should return true for this case
},
{
"item": {
'maker': 'boeing',
'name':"B777",
}
// should return false for this case
},
]
您可以采取不使用
eval
的方法,并使用数据构建表达式,其中包含一个函数,用于检查和以及或的相等和一些量化器
const
条件=[“或”、[“和”、[“==”、“制造商”、“空客”]、[“=”、“名称”、“A320”]、[“和”、[“=”、“制造商”、“波音”]、[“或”、[“=”、“名称”、“B767”]],
take=object=>{
常数
量词={和:'every',或'some'},
运算符={'=':(a,b)=>a==b},
evaluate=([symbol,…values])=>values.every(v=>typeof v==='string')
?运算符[符号](对象[值[0]],值[1])
:值[量词[符号]](评估);
回报评估;
},
案例=[
{item:{maker:'airbus',name:'A320}},//true
{项目:{制造商:'embraer',名称:“e175”},//错误
{item:{maker:'boeing'}},//true
{item:{name:“B767”}},//true
{item:{maker:'boeing',name:'B777'}},//true而不是false
],
结果=cases.map({item})=>take(item)(conditions));
控制台日志(结果)
你能在问题中包括你的实现/尝试吗?好吧,就是这样,我不确定如何格式化条件数组,这将影响搜索的效果。你能在javascript中插入想要的条件吗?比如或,和?是的,为什么不呢。为什么带有'name':“B767”
的项应该返回false?它与第三个子句相匹配,这就足够了。为什么最后一个案例会返回false?中间的子句接受任何波音公司的名称,没有任何条件,所以它应该返回true,不是吗?