Javascript 在具有通配符的数组中高效查找数组
我有一个数组对象,其形式如下:Javascript 在具有通配符的数组中高效查找数组,javascript,arrays,Javascript,Arrays,我有一个数组对象,其形式如下: [[eventID, IP, timestamp], [eventID, IP, timestamp]... ] 每隔一段时间,我就会收到一个相同格式的新数组对象([eventID,IP,timestamp]) 我需要检查主数组中是否存在具有相同eventID/IP对(很可能)但不匹配时间戳的现有对象 显然,我可以先迭代列表检查eventID,然后检查IP,但这似乎。。。不雅的。 我可以使用indexOf,但我不完全确定数组中用于匹配数组中元素的通配符元素的语法
[[eventID, IP, timestamp], [eventID, IP, timestamp]... ]
每隔一段时间,我就会收到一个相同格式的新数组对象([eventID,IP,timestamp])
我需要检查主数组中是否存在具有相同eventID/IP对(很可能)但不匹配时间戳的现有对象
显然,我可以先迭代列表检查eventID,然后检查IP,但这似乎。。。不雅的。
我可以使用indexOf,但我不完全确定数组中用于匹配数组中元素的通配符元素的语法
在主数组中搜索[eventID、IP、通配符]最有效的方法是什么?您可以使用两级键/值结构进行快速查找。传统上,人们会对普通对象执行此操作,但由于ES6,建议对此类动态增长的结构使用
Map
对象
例如,您可以使用一个对象作为具有两个维度(eventId和IP)的哈希,该对象在内部使用嵌套的Map
对象公开get和set方法:
函数EventHash(){
var hash=新映射;
this.set=函数(eventId、IP、时间戳){
如果(!hash.has(eventId))hash.set(eventId,新映射);
get(eventId).set(IP,时间戳);
归还这个;
};
this.get=函数(eventId,IP){
if(hash.has(eventId))返回hash.get(eventId.get(IP);
}
}
//演示
var hash=new EventHash();
散列集(1,'123.123.123',11111);
hash.set(1,'555.555.555.555',22222);
hash.set(2,'555.555.555.555',33333);
console.log(hash.get(1,'123.123.123.123'));//1111
hash.set(1,'123.123.123',44444);
console.log(hash.get(1,'123.123.123.123'));//4444
console.log(hash.get(5,'123.123.123.123');//不存在
console.log(hash.get(1',);//不存在
这是一次搜索,还是多次搜索?多次搜索。当存在新的eventID/IP对时,主阵列将增长。当eventID/IP对存在时,时间戳将被更新。它必须是一个数组,还是我们可以提出一个允许更快搜索的结构?另外,您能提供一些示例数据吗?我考虑过使用键:值对。出于好奇,我想知道怎么做,但是如果你知道一个整体上最有效的方法,那么我肯定会使用这个结构。我花了2分钟来实现。感觉也很瘦。好东西,谢谢!