Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 递归函数,用于格式化嵌套数组以匹配条件数组_Javascript_Arrays_Json_Object - Fatal编程技术网

Javascript 递归函数,用于格式化嵌套数组以匹配条件数组

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

尝试编写此eval函数,该函数接受事例,循环遍历事例,需要检查它是否与条件数组中的条件匹配,并返回true或false。我不确定如何最好地格式化条件数组并在其上运行匹配。条件是嵌套的,有n个级别,因此尝试获取递归函数

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,不是吗?