Javascript 如何在巨大的json文件之间执行最佳模式搜索?
正在寻找在JSON文件之间执行模式搜索的解决方案,这样可以遍历巨大的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文件 我的想法
这是相当基本的,我不是算法专家,但基本上,目标是为每个数组建立一个简单的索引。您可以简化并将值映射到更容易/更快速的内容,以便稍后进行比较。我认为,无论如何,你必须迭代数组 在这里,您在每个数组上迭代一次以构建索引,而在第一次尝试中,您有一个双循环 在第二阶段,双循环有点存在,将索引与
过滤器
/包括
进行比较,但我认为它会更轻,因为数组的长度减少了,而且数据更易于检查
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