Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.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 如何在巨大的json文件之间执行最佳模式搜索?_Javascript_C#_Node.js_Regex_Performance - Fatal编程技术网

Javascript 如何在巨大的json文件之间执行最佳模式搜索?

Javascript 如何在巨大的json文件之间执行最佳模式搜索?,javascript,c#,node.js,regex,performance,Javascript,C#,Node.js,Regex,Performance,正在寻找在JSON文件之间执行模式搜索的解决方案,这样可以遍历巨大的JSON文件,而不会对性能造成太大影响。下面是几个测试用例 搜索条件 “CAB_1”与“CAB_1”匹配 “客舱3”与“客舱3”或“客舱3”匹配 “第一舱”与“第一舱”匹配 测试用例文件 您可以找到测试json文件 我的想法 这是相当基本的,我不是算法专家,但基本上,目标是为每个数组建立一个简单的索引。您可以简化并将值映射到更容易/更快速的内容,以便稍后进行比较。我认为,无论如何,你必须迭代数组 在这里,您在每个数组上迭代

正在寻找在JSON文件之间执行模式搜索的解决方案,这样可以遍历巨大的JSON文件,而不会对性能造成太大影响。下面是几个测试用例

搜索条件
  • “CAB_1”与“CAB_1”匹配
  • “客舱3”与“客舱3”或“客舱3”匹配
  • “第一舱”与“第一舱”匹配
  • 测试用例文件
    您可以找到测试json文件

    我的想法

    这是相当基本的,我不是算法专家,但基本上,目标是为每个数组建立一个简单的索引。您可以简化并将值映射到更容易/更快速的内容,以便稍后进行比较。我认为,无论如何,你必须迭代数组

    在这里,您在每个数组上迭代一次以构建索引,而在第一次尝试中,您有一个双循环

    在第二阶段,双循环有点存在,将索引与
    过滤器
    /
    包括
    进行比较,但我认为它会更轻,因为数组的长度减少了,而且数据更易于检查

    const数据={
    “建筑”:{
    “楼层”:[
    {
    “空间”:[
    “小屋1号”,
    “小屋2号”,
    “小屋3”,
    “我的小屋”
    ]
    },
    {
    “空间”:[
    “第一舱”,
    “xyz的小屋”,
    “c区”,
    “d区”
    ]
    }
    ]
    }
    };
    const spaces=data.Building.floor;
    常量索引=空格。减少((acc,item)=>{
    acc.push(item.space.map)(it=>{
    归还。替换(/?CAB[]?/g',)//移除CAB、尾随空格和下划线。
    .replace(/1st | first/g,'1')//将非数字的事物映射到数字。
    .替换(/2nd | second/g,'2')
    .替换(/3rd | third/g,'3');
    }).filter(it=>!isNaN(it));//删除索引引擎未处理的所有内容。
    返回acc;
    }, []);
    控制台日志(索引);
    让我们短兵相接,长兵相接;
    如果(索引[0]。长度>索引[1]。长度){
    shorterArray=指数[1];
    长线=指数[0];
    }否则{
    短阵列=指数[0];
    长线=指数[1];
    }
    const sharedItems=shorterray.filter(it=>longerray.includes(it));
    
    console.log('sharedItems found',!!sharedItems.length,sharedItems)您没有添加JSON文件,现在想不出没有它的解决方案真的很难。另外,我认为你对你的期望不是很准确。您只想获取一个布尔值,看看是否有任何内容与您的匹配规则匹配?@sjahan json文件位于测试用例文件头中。为了保持简单,这里只需匹配并返回true或false就足够了。我在寻找更好的算法,而不仅仅是循环和比较每个属性,所以你想比较每个
    空间
    ,看看它们是否包含匹配项,对吗?我不确定我是否完全理解您的搜索条件:列表是否详尽明确?第五条规则有什么意义?”CAB_2必须与cabin2匹配,但CAB_1是与cabin1匹配还是仅与cabin1匹配?是的,CAB_1应该与cabin1匹配
    
    for each json1Property in json1
         for each json2Property in json2
            isMatch = regex('somepattern', json1property , json2property)
            if (isMatch) 
               return true 
            else 
               return false